all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#5601: 23.1; etags Scheme_functions past \0 terminator
@ 2010-02-19  0:13 Kevin Ryde
  2010-02-19  9:39 ` Francesco Potortì
  2010-02-20 14:12 ` Chong Yidong
  0 siblings, 2 replies; 3+ messages in thread
From: Kevin Ryde @ 2010-02-19  0:13 UTC (permalink / raw)
  To: 5601

[-- Attachment #1: Type: text/plain, Size: 628 bytes --]

In etags.c Scheme_functions, I think the loop

    while (notinname (*bp))
      bp++;

will take bp past the '\0' string terminator, because '\0' is a
notinname().

I can't spot any obvious ill effect, only that a line of only

    (define

is tagged, perhaps depending on what was on the line before it.  In any
case doesn't sound good to look into possibly uninitialized parts of the
input buffer.  (Another helper skip_notinname() to try to be clearer
than a double-negative loop :-)

2010-02-19  Kevin Ryde  <user42@zip.com.au>

	* etags.c (Scheme_functions): Don't go past '\0' terminator.
	(skip_notinname): New helper.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: etags.c.scheme-terminator.diff --]
[-- Type: text/x-diff, Size: 686 bytes --]

--- etags.c.~3.93.~	2009-11-29 08:42:32.000000000 +1100
+++ etags.c	2010-02-19 11:04:42.000000000 +1100
@@ -4989,6 +4989,16 @@
  *          (set! xyzzy
  * Original code by Ken Haase (1985?)
  */
+
+static char *
+skip_notinname (char *cp)
+{
+  /* '\0' is a notinname(), don't continue past it */
+  while (*cp && notinname (*cp))
+    cp++;
+  return cp;
+}
+
 static void
 Scheme_functions (inf)
      FILE *inf;
@@ -5001,8 +5011,7 @@
 	{
 	  bp = skip_non_spaces (bp+4);
 	  /* Skip over open parens and white space */
-	  while (notinname (*bp))
-	    bp++;
+	  bp = skip_notinname (bp);
 	  get_tag (bp, NULL);
 	}
       if (LOOKING_AT (bp, "(SET!") || LOOKING_AT (bp, "(set!"))

[-- Attachment #3: Type: text/plain, Size: 733 bytes --]




In GNU Emacs 23.1.1 (i486-pc-linux-gnu, GTK+ Version 2.16.5)
 of 2009-09-14 on raven, modified by Debian
configured using `configure  '--build=i486-linux-gnu' '--host=i486-linux-gnu' '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib' '--localstatedir=/var/lib' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-pop=yes' '--enable-locallisppath=/etc/emacs23:/etc/emacs:/usr/local/share/emacs/23.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/23.1/site-lisp:/usr/share/emacs/site-lisp:/usr/share/emacs/23.1/leim' '--with-x=yes' '--with-x-toolkit=gtk' '--with-toolkit-scroll-bars' 'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu' 'CFLAGS=-DDEBIAN -g -O2' 'LDFLAGS=-g' 'CPPFLAGS=''

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-02-20 14:12 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-19  0:13 bug#5601: 23.1; etags Scheme_functions past \0 terminator Kevin Ryde
2010-02-19  9:39 ` Francesco Potortì
2010-02-20 14:12 ` Chong Yidong

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.