summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2019-10-09 17:30:11 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2019-10-09 18:34:04 -0700
commit32915b2a8a43825720755113bdffe9f67a591748 (patch)
tree1ea61e21efd3ddbc24cc3b0c27a2b004021e67da
parent1eb7b25df1976fa852ddd7ea0ae26ec670146ce7 (diff)
downloadgnulib-32915b2a8a43825720755113bdffe9f67a591748.tar.gz
gnulib-32915b2a8a43825720755113bdffe9f67a591748.tar.bz2
regex: avoid copying of uninitialized storage
* config/srclist.txt: Comment out regcomp.c temporarily. * lib/regcomp.c (build_charclass_op, create_tree) [! (GCC_LINT||lint)]: Initialize even when not checking for lint, as the behavior is arguably undefined otherwise and Coverity warns about it.
-rw-r--r--ChangeLog8
-rw-r--r--config/srclist.txt2
-rw-r--r--lib/regcomp.c13
3 files changed, 11 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 0fbb2d4391..8251b83969 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2019-10-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ regex: avoid copying of uninitialized storage
+ * config/srclist.txt: Comment out regcomp.c temporarily.
+ * lib/regcomp.c (build_charclass_op, create_tree) [! (GCC_LINT||lint)]:
+ Initialize even when not checking for lint, as the behavior is
+ arguably undefined otherwise and Coverity warns about it.
+
2019-10-06 Bruno Haible <bruno@clisp.org>
access tests: Fix test failure when run as root.
diff --git a/config/srclist.txt b/config/srclist.txt
index 4a3a5a7af0..bceaee8631 100644
--- a/config/srclist.txt
+++ b/config/srclist.txt
@@ -52,7 +52,7 @@ $LIBCSRC malloc/scratch_buffer_grow_preserve.c lib/malloc
$LIBCSRC malloc/scratch_buffer_set_array_size.c lib/malloc
# Temporarily newer in Gnulib than in glibc.
#$LIBCSRC include/intprops.h lib
-$LIBCSRC posix/regcomp.c lib
+#$LIBCSRC posix/regcomp.c lib
$LIBCSRC posix/regex.c lib
$LIBCSRC posix/regex.h lib
$LIBCSRC posix/regex_internal.c lib
diff --git a/lib/regcomp.c b/lib/regcomp.c
index 7525355a9b..c1f7f2b2a4 100644
--- a/lib/regcomp.c
+++ b/lib/regcomp.c
@@ -3662,7 +3662,6 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans,
Idx alloc = 0;
#endif /* not RE_ENABLE_I18N */
reg_errcode_t ret;
- re_token_t br_token;
bin_tree_t *tree;
sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
@@ -3713,11 +3712,7 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans,
#endif
/* Build a tree for simple bracket. */
-#if defined GCC_LINT || defined lint
- memset (&br_token, 0, sizeof br_token);
-#endif
- br_token.type = SIMPLE_BRACKET;
- br_token.opr.sbcset = sbcset;
+ re_token_t br_token = { .type = SIMPLE_BRACKET, .opr.sbcset = sbcset };
tree = create_token_tree (dfa, NULL, NULL, &br_token);
if (__glibc_unlikely (tree == NULL))
goto build_word_op_espace;
@@ -3808,11 +3803,7 @@ static bin_tree_t *
create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right,
re_token_type_t type)
{
- re_token_t t;
-#if defined GCC_LINT || defined lint
- memset (&t, 0, sizeof t);
-#endif
- t.type = type;
+ re_token_t t = { .type = type };
return create_token_tree (dfa, left, right, &t);
}

Return to:

Send suggestions and report system problems to the System administrator.