diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | awk.h | 6 | ||||
-rw-r--r-- | extension/ChangeLog | 6 | ||||
-rw-r--r-- | extension/testext.c | 10 | ||||
-rw-r--r-- | test/ChangeLog | 4 | ||||
-rw-r--r-- | test/testext.ok | 2 |
6 files changed, 22 insertions, 8 deletions
@@ -5,6 +5,8 @@ it off the original using the dup_ent pointer. (remove_params): If there's a duplicate, remove it from the list. + * awk.h: Fix flags to have unique numeric values. Oops. + 2012-10-10 Arnold D. Robbins <arnold@skeeve.com> * gawkapi.h: Add considerably more documentation. Rearrange order @@ -449,10 +449,10 @@ typedef struct exp_node { # define NO_EXT_SET 0x2000 /* extension cannot set a value for this variable */ /* type = Node_var_array */ -# define ARRAYMAXED 0x2000 /* array is at max size */ -# define HALFHAT 0x4000 /* half-capacity Hashed Array Tree; +# define ARRAYMAXED 0x4000 /* array is at max size */ +# define HALFHAT 0x8000 /* half-capacity Hashed Array Tree; * See cint_array.c */ -# define XARRAY 0x8000 +# define XARRAY 0x10000 } NODE; #define vname sub.nodep.name diff --git a/extension/ChangeLog b/extension/ChangeLog index c20d4f4c..09068dc7 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,9 @@ +2012-10-11 Arnold D. Robbins <arnold@skeeve.com> + + * textext.c (try_modify_environ): Save array cookie in a separate + variable so it isn't clobbered. Thanks to Andrew Schorr, by way + of valgrind, for finding the bug. + 2012-09-14 Arnold D. Robbins <arnold@skeeve.com> * testext.c (try_modify_environ): New function and test. diff --git a/extension/testext.c b/extension/testext.c index 72cb5f8d..06564b1e 100644 --- a/extension/testext.c +++ b/extension/testext.c @@ -204,6 +204,7 @@ try_modify_environ(int nargs, awk_value_t *result) { awk_value_t value, index, newvalue; awk_flat_array_t *flat_array; + awk_array_t environ_array; size_t count; int i; @@ -223,7 +224,8 @@ try_modify_environ(int nargs, awk_value_t *result) goto out; } - if (! get_element_count(value.array_cookie, & count)) { + environ_array = value.array_cookie; + if (! get_element_count(environ_array, & count)) { printf("try_modify_environ: get_element_count failed\n"); goto out; } @@ -231,7 +233,7 @@ try_modify_environ(int nargs, awk_value_t *result) /* setting an array element should fail */ (void) make_const_string("testext2", 8, & index); (void) make_const_string("a value", 7, & value); - if (set_array_element(value.array_cookie, & index, & newvalue)) { + if (set_array_element(environ_array, & index, & newvalue)) { printf("try_modify_environ: set_array_element of ENVIRON passed\n"); } else { printf("try_modify_environ: set_array_element of ENVIRON failed\n"); @@ -239,7 +241,7 @@ try_modify_environ(int nargs, awk_value_t *result) free(value.str_value.str); } - if (! flatten_array(value.array_cookie, & flat_array)) { + if (! flatten_array(environ_array, & flat_array)) { printf("try_modify_environ: could not flatten array\n"); goto out; } @@ -267,7 +269,7 @@ try_modify_environ(int nargs, awk_value_t *result) } } - if (! release_flattened_array(value.array_cookie, flat_array)) { + if (! release_flattened_array(environ_array, flat_array)) { printf("try_modify_environ: could not release flattened array\n"); goto out; } diff --git a/test/ChangeLog b/test/ChangeLog index bd327f24..86ca9008 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2012-10-11 Arnold D. Robbins <arnold@skeeve.com> + + * testext.ok: Updated. + 2012-10-04 Akim Demaille <akim@lrde.epita.fr> Fix VPATH builds. diff --git a/test/testext.ok b/test/testext.ok index 3b1f423a..f6066352 100644 --- a/test/testext.ok +++ b/test/testext.ok @@ -12,7 +12,7 @@ dump_array_and_delete() did remove index "3"! try_modify_environ: sym_lookup of ENVIRON passed try_modify_environ: set_array_element of ENVIRON failed -try_modify_environ: could not flatten array +try_modify_environ: marking element "testext" for deletion try_del_environ() could not delete element - pass try_del_environ() could not add an element - pass var_test: sym_lookup of ARGC passed - got a value! |