summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac10
-rw-r--r--gl/lib/regcomp.c.diff23
-rw-r--r--gl/lib/regex_internal.c.diff25
-rw-r--r--gl/lib/regexec.c.diff45
-rw-r--r--lib/Makefile.am2
5 files changed, 104 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 3efc819a1..fb963ee98 100644
--- a/configure.ac
+++ b/configure.ac
@@ -114,6 +114,16 @@ if test "$gl_gcc_warnings" = yes; then
AC_DEFINE([_FORTIFY_SOURCE], [2],
[enable compile-time and run-time bounds-checking, and some warnings])
AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
+
+ # We use a slightly smaller set of warning options for lib/.
+ # Remove the following and save the result in GNULIB_WARN_CFLAGS.
+ nw=
+ nw="$nw -Wuninitialized"
+ nw="$nw -Wunused-macros"
+ nw="$nw -Wmissing-prototypes"
+ nw="$nw -Wold-style-definition"
+ gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
+ AC_SUBST([GNULIB_WARN_CFLAGS])
fi
AC_FUNC_FORK
diff --git a/gl/lib/regcomp.c.diff b/gl/lib/regcomp.c.diff
new file mode 100644
index 000000000..88097a445
--- /dev/null
+++ b/gl/lib/regcomp.c.diff
@@ -0,0 +1,23 @@
+diff --git a/lib/regcomp.c b/lib/regcomp.c
+index 6472ff6..fadf36d 100644
+--- a/lib/regcomp.c
++++ b/lib/regcomp.c
+@@ -18,6 +18,8 @@
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
++#include "intprops.h"
++#include "verify.h"
+ static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern,
+ size_t length, reg_syntax_t syntax);
+ static void re_compile_fastmap_iter (regex_t *bufp,
+@@ -2571,7 +2573,8 @@ parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa,
+ /* This loop is actually executed only when end != REG_MISSING,
+ to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have
+ already created the start+1-th copy. */
+- if ((Idx) -1 < 0 || end != REG_MISSING)
++ verify (! TYPE_SIGNED (Idx));
++ if (end != REG_MISSING)
+ for (i = start + 2; i <= end; ++i)
+ {
+ elem = duplicate_tree (elem, dfa);
diff --git a/gl/lib/regex_internal.c.diff b/gl/lib/regex_internal.c.diff
new file mode 100644
index 000000000..2cede3c07
--- /dev/null
+++ b/gl/lib/regex_internal.c.diff
@@ -0,0 +1,25 @@
+diff --git a/lib/regex_internal.c b/lib/regex_internal.c
+index 904b88e..61c8d9d 100644
+--- a/lib/regex_internal.c
++++ b/lib/regex_internal.c
+@@ -18,6 +18,8 @@
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
++#include "verify.h"
++#include "intprops.h"
+ static void re_string_construct_common (const char *str, Idx len,
+ re_string_t *pstr,
+ RE_TRANSLATE_TYPE trans, bool icase,
+@@ -1390,7 +1392,10 @@ static void
+ internal_function
+ re_node_set_remove_at (re_node_set *set, Idx idx)
+ {
+- if (idx < 0 || idx >= set->nelem)
++ verify (! TYPE_SIGNED (Idx));
++ /* if (idx < 0)
++ return; */
++ if (idx >= set->nelem)
+ return;
+ --set->nelem;
+ for (; idx < set->nelem; idx++)
diff --git a/gl/lib/regexec.c.diff b/gl/lib/regexec.c.diff
new file mode 100644
index 000000000..5c985f940
--- /dev/null
+++ b/gl/lib/regexec.c.diff
@@ -0,0 +1,45 @@
+diff --git a/lib/regexec.c b/lib/regexec.c
+index 21a8166..3b0d85c 100644
+--- a/lib/regexec.c
++++ b/lib/regexec.c
+@@ -18,6 +18,8 @@
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
++#include "verify.h"
++#include "intprops.h"
+ static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags,
+ Idx n) internal_function;
+ static void match_ctx_clean (re_match_context_t *mctx) internal_function;
+@@ -378,8 +380,11 @@ re_search_2_stub (struct re_pattern_buffer *bufp,
+ Idx len = length1 + length2;
+ char *s = NULL;
+
+- if (BE (length1 < 0 || length2 < 0 || stop < 0 || len < length1, 0))
+- return -2;
++ verify (! TYPE_SIGNED (Idx));
++ if (BE (len < length1, 0))
++ return -2; */
++ /* if (BE (length1 < 0 || length2 < 0 || stop < 0, 0))
++ return -2; */
+
+ /* Concatenate the strings. */
+ if (length2 > 0)
+@@ -431,11 +436,14 @@ re_search_stub (struct re_pattern_buffer *bufp,
+ Idx last_start = start + range;
+
+ /* Check for out-of-range. */
+- if (BE (start < 0 || start > length, 0))
+- return -1;
++ verify (! TYPE_SIGNED (Idx));
++ /* if (BE (start < 0, 0))
++ return -1; */
++ if (BE (start > length, 0))
++ return -1;
+ if (BE (length < last_start || (0 <= range && last_start < start), 0))
+ last_start = length;
+- else if (BE (last_start < 0 || (range < 0 && start <= last_start), 0))
++ else if (BE (/* last_start < 0 || */ (range < 0 && start <= last_start), 0))
+ last_start = 0;
+
+ __libc_lock_lock (dfa->lock);
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 074cc9cfc..896458f96 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -17,7 +17,7 @@
include gnulib.mk
-AM_CFLAGS += $(WARN_CFLAGS) # $(WERROR_CFLAGS)
+AM_CFLAGS += $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS)
libcoreutils_a_SOURCES += \
buffer-lcm.c buffer-lcm.h \