From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8936 invoked by alias); 29 Mar 2018 01:17:37 -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: 42560 Received: (qmail 24328 invoked by uid 1010); 29 Mar 2018 01:17:37 -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(0.1/5.0):. Processed in 15.107923 secs); 29 Mar 2018 01:17:37 -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=0.1 required=5.0 tests=BAYES_00,DATE_IN_PAST_06_12, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, SPF_PASS,T_DKIM_INVALID,T_RP_MATCHES_RCVD autolearn=no autolearn_force=no version=3.4.1 X-Envelope-From: SRS0=dDLQ=GT=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=1522285844; bh=tYVshbh8isUPf+aTD6EbRVjA+aO+fIGJ4E5fyX1tXbg=; h=From:References:To:Subject:Date:From:Subject; b=iQ6hM6+EvtGqhFVmRiHeWNnlRPROEgkY4B8KZqS2mo5cLPJxdlLOB3PGwH1oO9Jocc0Zh1bskZb8hJ91pJ9IRnwLNyTElxOKye18gvLuI8cjZqrhWTMOMDkgTdxxOKnzbpMslc/Fw/6bm26nKjf15P5tOV3WL9TMupau6Gk7zp/JUnI0XW5Hs2NYFWgcV595WHjSdlSSAxMht/qlM4xTB8e/XgJZUj41W1IIGBarFXQP/fTpYFb18P8zNRPRyHFacNtkUPWkxYsBA8UcFAJ57u6tqXnmT5/BPKzG9aGrxXolUpXUenEq8P/i5OWg9SfpKe8jKkLFDYpoHXfAoQX2Rg== X-YMail-OSG: yKPG2XcVM1nv.sXTylL50WzNJNAdX9MqBuoq548_w6XrmJ7Dx1mNBSOD1353K1I ZP0fg1DfUKS9_sQt2hjmGt.KLv__WSFsAjnXJsdQuZmqELvkNUPnvJk.qPZ3uMkdPjG2f_H.Mz3i e._0LWktE_rPhFtA25hPLR0ctu_92R5LKHOEOFaLQEa0C3qZfaDg0JPx2WCpAmIs5TtflUj3IikF eaLc4i0UTSga9dsWvCr_PnyacuF6lciulbAA6kDNolYn3wKDX5w6k2RHPEd1i_FoNU9SqLVHAWtA wiqeVf.bPxtOBW5JKTejt8gldcb6LwYixwVnwiqYwcuqh5lGTy57XzEgipghALTTN6zIXfBnMkRO 42f0Phk6w3UiaK1jG6VWBWjWxhAitQwwoaWZejYe19ki43UxeQ1NTNMvVDZIIGrtpcl2HGbCo0Aq EvOOZW2kLl5am_KCdaR6e4INTwGf6P3Nmm9lfk1iLCqMQSmK3kFp2ByLWyzn4pLJKoA4woiFiJ10 gsMwWItYmnw-- cc: zsh-workers@zsh.org In-reply-to: <2328442.7oMNVitVLA@kdudka-nb> From: Oliver Kiddle References: <3579.1522103995@thecus> <52497193.Jvz9bWjiNL@kdudka-nb> <2328442.7oMNVitVLA@kdudka-nb> To: Kamil Dudka Subject: Re: PATCH: spelling correction buffer overflow MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <11607.1522246044.1@thecus> Date: Wed, 28 Mar 2018 16:07:24 +0200 Message-ID: <11608.1522246044@thecus> Kamil Dudka wrote: > I spotted that this patch introduced new compiler warnings: > > Src/utils.c:4430:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] > # return (new - newname) >= (sizeof(newname)-1) ? NULL : newname; -Wsign-compare is not on by default and turning it on results in quite a few warnings for the zsh code. It seems a little silly given that the compiler ought to be able evaluate sizeof() at compile time and establish that it is within the range of a signed integer. > Should we cast RHS of the >= operator to ssize_t or ptrdiff_t to avoid them? Casts are a bit ugly. The following - adding newname to both the LHS and RHS - appears to avoid the warning by making both sides of the comparison of type signed. At least until someone decides that adding an unsigned to the signed should also generate a warning. Oliver diff --git a/Src/utils.c b/Src/utils.c index eab407eee..3587c3622 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -4396,7 +4396,7 @@ spname(char *oldname) * Rationale for this, if there ever was any, has been forgotten. */ for (;;) { while (*old == '/') { - if ((new - newname) >= (sizeof(newname)-1)) + if (new >= newname + sizeof(newname) - 1) return NULL; *new++ = *old++; } @@ -4427,7 +4427,7 @@ spname(char *oldname) if (bestdist < maxthresh) { struncpy(&new, spnameguess, sizeof(newname) - (new - newname)); struncpy(&new, old, sizeof(newname) - (new - newname)); - return (new - newname) >= (sizeof(newname)-1) ? NULL : newname; + return (new >= newname + sizeof(newname) - 1) ? NULL : newname; } else return NULL; } else { @@ -4435,7 +4435,7 @@ spname(char *oldname) bestdist += thisdist; } for (p = spnamebest; (*new = *p++);) { - if ((new - newname) >= (sizeof(newname)-1)) + if (new >= newname + sizeof(newname) - 1) return NULL; new++; }