OSDN Git Service

* cpplib.c (do_pragma_implementation): Fix off-by-one error
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 Mar 2000 17:25:36 +0000 (17:25 +0000)
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 Mar 2000 17:25:36 +0000 (17:25 +0000)
truncating a string.  Don't assume tokens are nul terminated.
Problem noted by Andreas Jaeger <aj@suse.de>

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32507 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cpplib.c
gcc/testsuite/gcc.dg/pr-impl.c [new file with mode: 0644]

index b9394c5..0d8d1d3 100644 (file)
@@ -1,3 +1,9 @@
+2000-03-13  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * cpplib.c (do_pragma_implementation): Fix off-by-one error
+       truncating a string.  Don't assume tokens are nul terminated.
+       Problem noted by Andreas Jaeger <aj@suse.de>
+
 2000-03-13  Jason Merrill  <jason@casey.cygnus.com>
 
        * dwarf2out.c (add_name_and_src_coords_attributes): Only add
index 91f86b7..02a9318 100644 (file)
@@ -1705,11 +1705,12 @@ do_pragma_implementation (pfile)
       return 1;
     }
 
+  /* Trim the leading and trailing quote marks from the string.  */
   name = pfile->token_buffer + written + 1;
-  len = strlen (name);
+  len = CPP_PWRITTEN (pfile) - name;
   copy = (U_CHAR *) alloca (len);
   memcpy (copy, name, len - 1);
-  copy[len] = '\0';    /* trim trailing quote */
+  copy[len - 1] = '\0';
   
   if (cpp_included (pfile, copy))
     cpp_warning (pfile,
diff --git a/gcc/testsuite/gcc.dg/pr-impl.c b/gcc/testsuite/gcc.dg/pr-impl.c
new file mode 100644 (file)
index 0000000..6083679
--- /dev/null
@@ -0,0 +1,7 @@
+/* Test warnings generated by #pragma implementation in the wrong place.  */
+/* { dg-do preprocess } */
+
+#pragma implementation "stdlib.h" /* { dg-bogus "appears after" "stdlib.h" } */
+#include <stdlib.h>
+#include <stdio.h>
+#pragma implementation "stdio.h" /* { dg-warning "appears after" "stdio.h" } */