Bash-4.2 patch 39
authorChet Ramey <chet@caleb.ins.cwru.edu>
Fri, 2 Nov 2012 14:06:20 +0000 (10:06 -0400)
committerChet Ramey <chet@caleb.ins.cwru.edu>
Fri, 2 Nov 2012 14:06:20 +0000 (10:06 -0400)
expr.c
patchlevel.h

diff --git a/expr.c b/expr.c
index 14cdca2..98d75b6 100644 (file)
--- a/expr.c
+++ b/expr.c
@@ -1009,6 +1009,12 @@ expr_streval (tok, e, lvalue)
   arrayind_t ind;
 #endif
 
+/*itrace("expr_streval: %s: noeval = %d", tok, noeval);*/
+  /* If we are suppressing evaluation, just short-circuit here instead of
+     going through the rest of the evaluator. */
+  if (noeval)
+    return (0);
+
   /* [[[[[ */
 #if defined (ARRAY_VARS)
   v = (e == ']') ? array_variable_part (tok, (char **)0, (int *)0) : find_variable (tok);
@@ -1182,6 +1188,10 @@ readtok ()
 #endif /* ARRAY_VARS */
 
       *cp = '\0';
+      /* XXX - watch out for pointer aliasing issues here */
+      if (curlval.tokstr && curlval.tokstr == tokstr)
+       init_lvalue (&curlval);
+
       FREE (tokstr);
       tokstr = savestring (tp);
       *cp = c;
index 99d2ea2..7193c0c 100644 (file)
@@ -25,6 +25,6 @@
    regexp `^#define[   ]*PATCHLEVEL', since that's what support/mkversion.sh
    looks for to find the patch level (for the sccs version string). */
 
-#define PATCHLEVEL 38
+#define PATCHLEVEL 39
 
 #endif /* _PATCHLEVEL_H_ */