From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20618 invoked by alias); 23 Nov 2015 15:34:43 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 37203 Received: (qmail 9572 invoked from network); 23 Nov 2015 15:34:42 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.0 X-AuditID: cbfec7f4-f79026d00000418a-08-5653320ec10a Date: Mon, 23 Nov 2015 15:34:35 +0000 From: Peter Stephenson To: zsh-workers@zsh.org Subject: Re: This looks obviously wrong to me, but maybe it's unreachable? Message-id: <20151123153435.5950a7c6@pwslap01u.europe.root.pri> In-reply-to: <151122145046.ZM12975@torch.brasslantern.com> References: <151122145046.ZM12975@torch.brasslantern.com> Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrALMWRmVeSWpSXmKPExsVy+t/xa7p8RsFhBrsn6FocbH7I5MDoserg B6YAxigum5TUnMyy1CJ9uwSujD19H5kLNnJXNP78xN7A+Iqji5GTQ0LAROLeiWusELaYxIV7 69m6GLk4hASWMko87TrNAuHMYJLY+O4llHOOUeLNrNPMEM5ZRolfpxuBHA4OFgFViU1bLEBG sQkYSkzdNJsRxBYREJc4u/Y8C4gtLOAlsWT9biYQm1fAXqL9zHqw1ZwCVhJX9x5mB7GFBCwl vjU/Ygax+QX0Ja7+/cQEcZ69xMwrZxghegUlfky+BzaTWUBLYvO2JlYIW15i85q3zBBz1CVu 3N3NPoFReBaSlllIWmYhaVnAyLyKUTS1NLmgOCk911CvODG3uDQvXS85P3cTIyScv+xgXHzM 6hCjAAejEg+vhn5QmBBrYllxZe4hRgkOZiURXmbx4DAh3pTEyqrUovz4otKc1OJDjNIcLEri vHN3vQ8REkhPLEnNTk0tSC2CyTJxcEo1MHZNvpjk8i7hUXGgi/uix01n1CeqCMuIzYi0j2pT u1PcPkmgZU3C52qT/28aWw4vN1PJ5u2+57xi8d8qfQ/d2ObUrcsmNrKZLqhb9bGHa/Z0tyaf dUIZa48zr2ZjVRHQb5DL+snm+ez057MHWzsdz77XPndtLksKfw2v8vdHr9sDr8uLFExkUmIp zkg01GIuKk4EAJc0dIBjAgAA On Sun, 22 Nov 2015 14:50:46 -0800 Bart Schaefer wrote: > This is in sethparam(): > > if (!(v = fetchvalue(&vbuf, &s, 1, SCANPM_ASSIGNING))) { > createparam(t, PM_HASHED); > if (isset(WARNCREATEGLOBAL) && locallevel > 0) > check_warn_create(v->pm, "associative array"); > > That's plainly dereferencing v->pm in a block where v is NULL. It should probably be this. pws diff --git a/Src/params.c b/Src/params.c index b121bd6..602f69f 100644 --- a/Src/params.c +++ b/Src/params.c @@ -2970,6 +2970,7 @@ sethparam(char *s, char **val) struct value vbuf; Value v; char *t = s; + int checkcreate = 0; if (!isident(s)) { zerr("not an identifier: %s", s); @@ -2988,8 +2989,7 @@ sethparam(char *s, char **val) queue_signals(); if (!(v = fetchvalue(&vbuf, &s, 1, SCANPM_ASSIGNING))) { createparam(t, PM_HASHED); - if (isset(WARNCREATEGLOBAL) && locallevel > 0) - check_warn_create(v->pm, "associative array"); + checkcreate = isset(WARNCREATEGLOBAL) && locallevel > 0; } else if (!(PM_TYPE(v->pm->node.flags) & PM_HASHED) && !(v->pm->node.flags & PM_SPECIAL)) { unsetparam(t); @@ -3002,6 +3002,8 @@ sethparam(char *s, char **val) unqueue_signals(); return NULL; } + if (checkcreate) + check_warn_create(v->pm, "associative array"); setarrvalue(v, val); unqueue_signals(); return v->pm;