From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ian Nehera Newsgroups: gmane.emacs.bugs Subject: bug#51171: 27.2; `forward-word' w/arg bug in narrowed buffer Date: Tue, 12 Oct 2021 17:17:14 -0700 Message-ID: <31D3ED6E-A1EB-4214-901F-FB62BF2A6922@shaw.ca> Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.21\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_0C4DBB23-2F7E-4567-B540-6F2B9B9203FA" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="4404"; mail-complaints-to="usenet@ciao.gmane.io" To: 51171@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Oct 13 02:21:14 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1maS1B-0000tc-7f for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 13 Oct 2021 02:21:13 +0200 Original-Received: from localhost ([::1]:48878 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1maS18-0000ij-RT for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 12 Oct 2021 20:21:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:58370) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1maS10-0000iG-O1 for bug-gnu-emacs@gnu.org; Tue, 12 Oct 2021 20:21:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:44628) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1maS10-00012b-FL for bug-gnu-emacs@gnu.org; Tue, 12 Oct 2021 20:21:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1maS10-0002Tr-Bs for bug-gnu-emacs@gnu.org; Tue, 12 Oct 2021 20:21:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Ian Nehera Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 13 Oct 2021 00:21:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 51171 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.16340844549486 (code B ref -1); Wed, 13 Oct 2021 00:21:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 13 Oct 2021 00:20:54 +0000 Original-Received: from localhost ([127.0.0.1]:56169 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1maS0r-0002Sq-FI for submit@debbugs.gnu.org; Tue, 12 Oct 2021 20:20:54 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:51596) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1maRxT-0002MF-1l for submit@debbugs.gnu.org; Tue, 12 Oct 2021 20:17:23 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:57722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1maRxR-00006l-Ui for bug-gnu-emacs@gnu.org; Tue, 12 Oct 2021 20:17:22 -0400 Original-Received: from omta001.cacentral1.a.cloudfilter.net ([3.97.99.32]:47085) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1maRxN-000739-Vi for bug-gnu-emacs@gnu.org; Tue, 12 Oct 2021 20:17:21 -0400 Original-Received: from shw-obgw-4003a.ext.cloudfilter.net ([10.228.9.183]) by cmsmtp with ESMTP id aNjVm3D9qczbLaRxLmT528; Wed, 13 Oct 2021 00:17:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=shaw.ca; s=s20180605; t=1634084235; bh=io8ya6ypof/xy43sBuZ9dYBGABzqP0PA5vsENTv5xXQ=; h=From:Subject:Date:To; b=KvhU+HqmGhVSwuCwp0BsW9rw0so+Wxgw6UfawBXMhwzxu4geJrPHVN8Xn6+2jOGQ1 OwIuoo73oqekL2d7xyZLo25Riup/5x/xydhH6ObtH5KqAi54XtKXMZHNG0nq3mSCT8 Uq2h9uvdIyeQXIPhVS15BKgf3W85qOpmJQh1DaC6ZM3G2XkR+9I0oMIZ4aQ2hfQLdx SIVPsCyw+9Izh1mldG64DdIer7Cjs94ZJ6wUPPauPW++0HZ423IH231xBYwsnDuRbX tZ02RA6P/1gvxfOAOFurPjIydUyi7AggX5woaO9xmwWIPoV0SYn4FK66ouQrPzo4G8 4Mf55n5PlUzDA== Original-Received: from ians-mbp.hitronhub.home ([24.80.41.162]) by cmsmtp with ESMTPA id aRxKmgkbG2J2faRxLmkquj; Wed, 13 Oct 2021 00:17:15 +0000 Authentication-Results: ; auth=pass (PLAIN) smtp.auth=delta29@shaw.ca X-Authority-Analysis: v=2.4 cv=P8xZOgMu c=1 sm=1 tr=0 ts=6166258b a=68GUtf/ThuVGfj9FO3ScHA==:117 a=68GUtf/ThuVGfj9FO3ScHA==:17 a=Ko3Y0Lly6hIM5F5IRsgA:9 a=CjuIK1q_8ugA:10 a=mrGQFXgL3o5Yvq6BKJoA:9 a=JMNH9X61SiQA:10 a=h55ZjLXlAAAA:8 a=WZbH0z1Gn1WUqwY2jh8A:9 a=QEXdDO2ut3YA:10 a=bVIcrEQjCtdAe-SrG74p:22 X-Mailer: Apple Mail (2.3445.104.21) X-CMAE-Envelope: MS4xfOm9q5sajyC7pJQC8acIlo1vueHSfrJZq+p/u7XPWYHP3Gqu14iVxf2UiG4yE4/gUSVR1vXbEYtwVuG9iuDvCgfSSNKuJPW3grHuJ6ZCHzQ870g8X7ap RjNcfwMIcDeJs97MA7rOA3Dne4MiaH183yTduQ6S4WLPBueBemn8nVxSfqvbeT5eOxb79amY1oxCGCavZcmiAeEb4USq/YefhOE= Received-SPF: pass client-ip=3.97.99.32; envelope-from=delta29@shaw.ca; helo=omta001.cacentral1.a.cloudfilter.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 12 Oct 2021 20:20:52 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:217083 Archived-At: --Apple-Mail=_0C4DBB23-2F7E-4567-B540-6F2B9B9203FA Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii Hi, I found a bug relating to subword mode in narrowed buffers. --Apple-Mail=_0C4DBB23-2F7E-4567-B540-6F2B9B9203FA Content-Disposition: attachment; filename=dcl.c Content-Type: application/octet-stream; x-unix-mode=0755; name="dcl.c" Content-Transfer-Encoding: 7bit #include #include #include #define MAXTOKEN 100 /* can't go below 3 */ #define MAXOUTPUT 1000 /* should always be >= MAXTOKEN */ enum { NAME, PARENS, BRACKETS } TokenType; enum { OK, ERROR }; static const char *Typelist[] = { "char", "int", "short", "long", "unsigned", "float", "double", "void", NULL }; static char Name[MAXTOKEN], Output[MAXOUTPUT], Token[MAXTOKEN]; static int OutSpc = MAXOUTPUT; void undeclaration(void); void declaration(void); int dcl(void); int dirdcl(void); void outputCat(const char *s); void flushline(void); int gettoken(void); int main(const int argc, const char *argv[]) { if (argc > 1 && strcmp(argv[1], "--undcl") == 0) undeclaration(); else declaration(); return 0; } void undeclaration(void) { char type, temp[MAXOUTPUT]; int ispointer = 0; while (gettoken() != EOF) { strcpy(Output, Token); OutSpc = MAXOUTPUT - strlen(Token); while ((type = gettoken()) != '\n') { if (type == PARENS || type == BRACKETS) { if (ispointer) { OutSpc -= snprintf(temp, MAXOUTPUT, "(%s)%s", Output, Token); /* C99 feature */ strcpy(Output, temp); ispointer = 0; } else { outputCat(Token); } } else if (type == '*') { snprintf(temp, MAXOUTPUT, "*%s", Output); strcpy(Output, temp); ispointer = 1; } else if (type == NAME) { snprintf(temp, MAXOUTPUT, "%s %s", Token, Output); strcpy(Output, temp); ispointer = 0; } else { printf("ERROR: Invalid input at %s\n", Token); } } printf("%s\n", Output); ispointer = 0; /* reset for next line of input */ } } char gettype(char *s); void declaration(void) { char datatype[MAXTOKEN]; while (gettype(datatype) != EOF) { Output[0] = '\0'; if (dcl() == ERROR) { flushline(); } else if (TokenType != '\n' && TokenType != ',') { printf("ERROR: Syntax error for %s.\n", datatype); flushline(); } else { printf("%s: %s %s\n", Name, Output, datatype); Token[0] = '\0'; } } } int dcl(void) { int ns = 0; while (gettoken() == '*') ++ns; if (dirdcl() == ERROR) return ERROR; while (ns-- > 0) outputCat(" pointer to"); return OK; } int dirdcl(void) { if (TokenType == '(') { if (dcl() == ERROR) { return ERROR; } if (TokenType != ')') { printf("ERROR: Closing ')' paren missing.\n"); return ERROR; } } else if (TokenType == NAME) { strcpy(Name, Token); } else { printf("ERROR: Expected name or (dcl).\n"); return ERROR; } while (gettoken() == PARENS || TokenType == BRACKETS) { if (TokenType == PARENS) { outputCat(" function returning"); } else { outputCat(" array"); strcat(Output, Token); outputCat(" of"); } } return OK; } char getch(void); void ungetch(const char c); int gettoken(void) { char c, *p = Token; while (isblank(c = getch())) /* C99 feature */ ; if (c == '(') { if ((c = getch()) == ')') { strcpy(Token, "()"); TokenType = PARENS; } else { ungetch(c); TokenType = '('; } } else if (c == '[') { for (*p++ = c; (*p++ = getch()) != ']' && p-Token < MAXTOKEN-1; ) ; *p = '\0'; TokenType = BRACKETS; } else if (isalpha(c) || c == '_') { for (*p++ = c; (isalnum(c = getch()) || c == '_') && p-Token < MAXTOKEN-1; ) { *p++ = c; } *p = '\0'; ungetch(c); TokenType = NAME; } else { TokenType = c; } return TokenType; } char gettype(char *s) { static const char *last, *start, **type; static char c; while (isblank(c = getch())) ; last = start = s; while (isalpha(c) || c == '_') { last = s; for (*s++ = c; (isalnum(c = getch()) || c == '_') && s-start < MAXTOKEN-1; ) { *s++ = c; } if (isblank(c) && s-start < MAXTOKEN-1) { *s++ = ' '; /* no point in printing a tab char */ while (isblank(c = getch())) ; } } ungetch(c); if (*(s-1) == ' ') /* should only be one 'space' at most */ --s; *s = '\0'; if (last != start) { for (type = Typelist; *type != NULL && strcmp(*type, last); ++type) ; if (*type == NULL) { do { ungetch(*--s); } while (s >= last); *s = '\0'; } } TokenType = '\n'; return c; } void outputCat(const char *s) { if ((OutSpc -= strlen(s)) > 0) { strcat(Output, s); } else { printf("ERROR: Not enough space in Output[] to add:\n\ \"%s\"\n", s); } } void flushline(void) { static char c; /* flush both buffer[] and stdin */ while ((c = getch()) != '\n' && c != EOF) ; if (c == EOF) ungetch(c); } #define BUFFER 1000 char buffer[BUFFER]; char *bp = buffer; char getch(void) { return (bp > buffer) ? *--bp : getchar(); } void ungetch(const char c) { if (bp - buffer < BUFFER) *bp++ = c; else printf("ERROR: ungetch(); not enough room to unget '%c'.\n"); } --Apple-Mail=_0C4DBB23-2F7E-4567-B540-6F2B9B9203FA Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 To reproduce from 'emacs -Q /path/to/dcl.c=E2=80=99 (file attached): 1. M-x `subword-mode' (side question: should C-c C-w still use the obsolete alias `c-subword-mode'?). 2. Navigate to the function 'int dirdcl(void)' and use `narrow-to-defun' (C-x n d). 3. =46rom the top of the buffer, use `forward-word' with an arg = greater than 1 (like C-u 2 M-f). 4. Repeat this with C-x z z z z... until you get an error around the start of the while loop (2nd to last message in list below). 5. Moving point forward then trying the same command again will yield the last message with a number greater than `point-max' (5741). Other notes: - The bug dissapears with a widened buffer or when narrowing to earlier functions. - `backward-word=E2=80=99 doesn=E2=80=99t seem to have the same = problem. - I'm reporting this from OSX 10.14.6 (homebrew), but it also = occurs on Arch Linux (emacs being installed from the standard pacman = repos). Thanks, Ian = =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2= =80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94= =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2= =80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94 In GNU Emacs 27.2 (build 1, x86_64-apple-darwin18.7.0, NS appkit-1671.60 = Version 10.14.6 (Build 18G95)) of 2021-03-27 built on builder10-14.porkrind.org Windowing system distributor 'Apple', version 10.3.1671 System Description: Mac OS X 10.14.6 Recent messages: For information about GNU Emacs and the GNU system, type C-h C-a. Subword mode enabled in current buffer You can run the command =E2=80=98subword-mode=E2=80=99 with M-x sub-mo = RET Subword mode enabled in current buffer Mark saved where search started Repeating command 2 forward-word [22 times] funcall-interactively: Error in syntax_table logic for to-the-end = intervals funcall-interactively: Point 5751 after end of properties Configured using: 'configure --with-ns '--enable-locallisppath=3D/Library/Application Support/Emacs/${version}/site-lisp:/Library/Application Support/Emacs/site-lisp' --with-modules' Configured features: NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES THREADS JSON PDUMPER GMP Important settings: value of $LANG: en_CA.UTF-8 locale-coding-system: utf-8-unix Major mode: C/*l Minor modes in effect: subword-mode: t tooltip-mode: t global-eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t abbrev-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs format-spec rfc822 mml mml-sec password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs text-property-search time-date subr-x seq byte-opt gv bytecomp byte-compile cconv mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils repeat misearch multi-isearch cap-words superword subword cc-mode cc-fonts easymenu cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs cl-loaddefs cl-lib tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads kqueue cocoa ns multi-tty make-network-process emacs) Memory information: ((conses 16 67774 7216) (symbols 48 8485 1) (strings 32 21588 2096) (string-bytes 1 819438) (vectors 16 12983) (vector-slots 8 159689 12408) (floats 8 21 47) (intervals 56 528 0) (buffers 1000 12)) --Apple-Mail=_0C4DBB23-2F7E-4567-B540-6F2B9B9203FA--