Author: mdf
Date: Thu Dec 12 02:04:59 2013
New Revision: 259243
URL: http://svnweb.freebsd.org/changeset/base/259243

Log:
  MFC r258658:
  
  Fix a segfault / internal compiler error.
  
  Among other causes, when gcc throws a warning before parsing any tokens,
  the cur_token pointer is at the beginning of malloc'd memory.
  Dereferencing cur_token[-1] can cause a segfault.
  
  Code taken from OpenBSD
  http://www.openbsd.org/cgi-bin/cvsweb/src/gnu/gcc/libcpp/errors.c
  which was a more complete fix than the one I originally coded.

Modified:
  stable/9/contrib/gcclibs/libcpp/errors.c
Directory Properties:
  stable/9/contrib/gcclibs/   (props changed)

Modified: stable/9/contrib/gcclibs/libcpp/errors.c
==============================================================================
--- stable/9/contrib/gcclibs/libcpp/errors.c    Thu Dec 12 02:03:42 2013        
(r259242)
+++ stable/9/contrib/gcclibs/libcpp/errors.c    Thu Dec 12 02:04:59 2013        
(r259243)
@@ -153,7 +153,20 @@ cpp_error (cpp_reader * pfile, int level
        }
       else
        {
-         src_loc = pfile->cur_token[-1].src_loc;
+         /* Find actual previous token.  */
+         cpp_token *t;
+
+         if (pfile->cur_token != pfile->cur_run->base)
+           t = pfile->cur_token - 1;
+         else
+           {
+             if (pfile->cur_run->prev != NULL)
+               t = pfile->cur_run->prev->limit;
+             else
+               t = NULL;
+           }
+         /* Retrieve corresponding source location, unless we failed.  */
+         src_loc = t ? t->src_loc : 0;
        }
 
       if (_cpp_begin_message (pfile, level, src_loc, 0))
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to