From: Paul Eggert Date: Thu, 10 Oct 2019 00:30:11 +0000 (-0700) Subject: regex: avoid copying of uninitialized storage X-Git-Tag: v1.0~4636 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=32915b2a8a43825720755113bdffe9f67a591748;p=gnulib.git 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. --- diff --git a/ChangeLog b/ChangeLog index 0fbb2d4391..8251b83969 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2019-10-09 Paul Eggert + + 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 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); }