diff options
Diffstat (limited to 'extension')
-rw-r--r-- | extension/ChangeLog | 6 | ||||
-rw-r--r-- | extension/testext.c | 10 |
2 files changed, 12 insertions, 4 deletions
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; } |