From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4790 invoked by alias); 6 Apr 2018 16:06:21 -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: List-Unsubscribe: X-Seq: 42601 Received: (qmail 6340 invoked by uid 1010); 6 Apr 2018 16:06:21 -0000 X-Qmail-Scanner-Diagnostics: from park01.gkg.net by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(205.235.26.22):SA:0(-1.4/5.0):. Processed in 2.624521 secs); 06 Apr 2018 16:06:21 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE,SPF_PASS,T_DKIM_INVALID,T_RP_MATCHES_RCVD autolearn=no autolearn_force=no version=3.4.1 X-Envelope-From: SRS0=2XKO=G3=yahoo.co.uk=okiddle@bounces.park01.gkg.net X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | X-Virus-Scanned: by amavisd-new at gkg.net Authentication-Results: amavisd4.gkg.net (amavisd-new); dkim=pass (2048-bit key) header.d=yahoo.co.uk X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1523030768; bh=mgwL/h97+bvhafQAUVCYRVx4hb+CTi+LG4OMryztGc8=; h=From:To:Subject:Date:From:Subject; b=iC2b5e6b7PUZulFnhahYgUtkhOdPV3XwatidM0LonM+bMbSM6b7LV3hkzsLTUtGHF2xsUt++/ds6VR2Tqt4o1iinvde6qMyikYooaPRKERHvOZOmnLX1Jxti1uPdLvBK0eK/SYjSBlYCHGw+q/DkW6IwCL/+3L4Ct2ibjfHLaX/zqR9iA+UkYncAOn7tRSvCEwiDFyQts+4hmK5Ob8rymMxm84ErHA2sGTN7XRpJ/+DPx1BpAQEtRFylXxNXh9iCeMswQSzNpvdSGrd+rl6CX6NPnyPeX4OR/YvtpnrvlCRy78Z6oqwWWCMeqSi8TsHiV/B4yVkCNse6KVP6o/P89Q== X-YMail-OSG: i5qvtVIVM1lX0VRmuaxX3.4seHRBbQSZY8dUQV5Yf06bSSaCddfz_CiPmO8duUu DTdru5L7p__ooVzmi5vURHjH7E5MdxO52KxYlxmDmDN4IvH3.nUgOzLStaBj7_i.CoJN_4Y4Vatp 7LNPeZSLHvU5NLQ_TNdjElN600g97otx0TxW6mGTre4ItkderfU.GBIrlBYc9dQiI8YUzHhWtU2z jqwuXUBHEM2sAltqCDKUoPektEKDg.g9PbwDBgRlKHxsTIT63UjyPa99qwVv9n72b7SEDe_V_Lef fYEdNCAnnQ19aq8Humy8TCNzRnviHoDCihMzkIM98fo63N1b5Xvtkurnu2Hok.wWLsnIgRxQ1Vq_ Cp.hV9Gr_O2KP2riDEvd.mBSTPgZjqbJ3hIEoN1hCqDhNw.UEeb4RWmizDv5cKkikczIbPS_AWPF W11CEVw86G_EBjEQtdav1WjTr.Lcukl1msv3rhpmLaJU1th2aJU6TFNx.UBYlfrS9TbELpLcJi_Q 5E0zMBbaABQ-- From: Oliver Kiddle To: Zsh workers Subject: PATCH: don't increment a null pointer in set -A MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <30853.1523030767.1@thecus> Date: Fri, 06 Apr 2018 18:06:07 +0200 Message-ID: <30854.1523030767@thecus> In coverity CID 1255831, it warns about this code which handles set -A and set +A. There's no actual bug here but the following change is more efficient (thanks to arrlen_gt) and makes the code somewhat cleaner at least in my opinion. In the case of set -A, we assign a to NULL and then increment it with each loop. Incrementing a NULL pointer is harmless but still a bit icky. Unfortunately, coverity will probably still complain about this because it can't connect the fact that (!*args) will only ever be true when a wasn't/isn't null. Oliver diff --git a/Src/builtin.c b/Src/builtin.c index fb59738f3..73cfe7ad1 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -695,13 +695,11 @@ bin_set(char *nam, char **args, UNUSED(Options ops), UNUSED(int func)) char **a = NULL, **y; int len = arrlen(args); - if (array < 0 && (a = getaparam(arrayname))) { - int al = arrlen(a); - - if (al > len) - len = al; + if (array < 0 && (a = getaparam(arrayname)) && arrlen_gt(a, len)) { + a += len; + len += arrlen(a); } - for (x = y = zalloc((len + 1) * sizeof(char *)); len--; a++) { + for (x = y = zalloc((len + 1) * sizeof(char *)); len--;) { if (!*args) args = a; *y++ = ztrdup(*args++);