]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve static checking of integer overflow and stack smashing.
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 19 Nov 2012 23:39:28 +0000 (15:39 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 19 Nov 2012 23:39:28 +0000 (15:39 -0800)
* configure.ac (WARN_CFLAGS): Add -Wstack-protector and
-Wstrict-overflow if using GCC 4.7.2 or later on a platform with
at least 64-bit long int.  This improves static checking on these
platforms, when configured with --enable-gcc-warnings.

ChangeLog
configure.ac

index 05e1a14d55d4da2449b3eec56b65ded4ea3218c5..6852069087a209dfa05b462179b5e449ebfa00a0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-11-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Improve static checking of integer overflow and stack smashing.
+       * configure.ac (WARN_CFLAGS): Add -Wstack-protector and
+       -Wstrict-overflow if using GCC 4.7.2 or later on a platform with
+       at least 64-bit long int.  This improves static checking on these
+       platforms, when configured with --enable-gcc-warnings.
+
 2012-11-17  Paul Eggert  <eggert@cs.ucla.edu>
 
        Assume POSIX 1003.1-1988 or later for fcntl.h (Bug#12881).
index 1884cc7ccf7f72e4ac86fc6a8febebf9d2d79556..2a079cad264b72e3599095289959f55b1f7815d9 100644 (file)
@@ -717,11 +717,24 @@ else
   # <http://lists.gnu.org/archive/html/emacs-diffs/2011-11/msg00265.html>.
   nw="$nw -Wshadow"
 
-  # The following lines should be removable at some point.
-  nw="$nw -Wstack-protector"
-  nw="$nw -Wstrict-overflow"
+  # The following line should be removable at some point.
   nw="$nw -Wsuggest-attribute=pure"
 
+  AC_MSG_CHECKING([whether to use -Wstack-protector -Wstrict-overflow])
+  AC_PREPROC_IFELSE(
+    [AC_LANG_PROGRAM(
+       [[#if (1 <= __LONG_MAX__ >> 31 >> 31 \
+           && 4 < __GNUC__ + (7 < __GNUC_MINOR__ + (2 <= __GNUC_PATCHLEVEL__)))
+          /* OK */
+         #else
+          #error "Not GCC, or GCC before 4.7.2, or 'long int' has < 64 bits."
+        #endif
+       ]])],
+    [AC_MSG_RESULT(yes)],
+    [AC_MSG_RESULT(no)
+     nw="$nw -Wstack-protector"
+     nw="$nw -Wstrict-overflow"])
+
   gl_MANYWARN_ALL_GCC([ws])
   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
   for w in $ws; do