summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/params.c15
2 files changed, 17 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index be531ab47..75b6e3036 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-01-08  Peter Stephenson  <pws@csr.com>
+
+	* 26260: Src/params.c: fix crash when failing to assign
+	scalar to special hash.
+
 2009-01-06  Peter Stephenson  <pws@csr.com>
 
 	* unposted: Doc/Zsh/mod_stat.yo: fix yodl problem with 26229.
diff --git a/Src/params.c b/Src/params.c
index 0faf667b9..1a826bff4 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -495,10 +495,10 @@ scancountparams(UNUSED(HashNode hn), int flags)
 static Patprog scanprog;
 static char *scanstr;
 static char **paramvals;
-static Param foundparam;     
+static Param foundparam;
 
 /**/
-void
+static void
 scanparamvals(HashNode hn, int flags)
 {
     struct value v;
@@ -538,6 +538,7 @@ scanparamvals(HashNode hn, int flags)
 	    --numparamvals;	/* Value didn't match, discard key */
     } else
 	++numparamvals;
+    foundparam = NULL;
 }
 
 /**/
@@ -2270,7 +2271,15 @@ setstrvalue(Value v, char *val)
 	break;
     case PM_HASHED:
         {
-	    foundparam->gsu.s->setfn(foundparam, val);
+	    if (foundparam == NULL)
+	    {
+		zerr("%s: attempt to set associative array to scalar",
+		     v->pm->node.nam);
+		zsfree(val);
+		return;
+	    }
+	    else
+		foundparam->gsu.s->setfn(foundparam, val);
         }
 	break;
     }