aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--awk.h6
-rw-r--r--extension/ChangeLog6
-rw-r--r--extension/testext.c10
-rw-r--r--test/ChangeLog4
-rw-r--r--test/testext.ok2
6 files changed, 22 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 9222c705..421ae5e6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/awk.h b/awk.h
index c2a65584..a684b732 100644
--- a/awk.h
+++ b/awk.h
@@ -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!