From patchwork Thu Jan 7 01:06:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruno Haible X-Patchwork-Id: 41659 X-Patchwork-Delegate: azanella@linux.vnet.ibm.com Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A1FA83948451; Thu, 7 Jan 2021 01:07:13 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mo4-p01-ob.smtp.rzone.de (mo4-p01-ob.smtp.rzone.de [81.169.146.167]) by sourceware.org (Postfix) with ESMTPS id 41C5D3844072 for ; Thu, 7 Jan 2021 01:07:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 41C5D3844072 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=clisp.org Authentication-Results: sourceware.org; spf=none smtp.mailfrom=bruno@clisp.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1609981630; s=strato-dkim-0002; d=clisp.org; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:From: Subject:Sender; bh=DLlL7D2sCFv2pYJkNc93yIbaO7ZXkJOEyJJ6JhAhkdU=; b=jzm54SXvQo/J1wOt2lnWjcFTOWTvbNbgIFNZFU2r+q3f2nnZM5vyGaQ7lZ+iVCjtcK +Ypv5YDndxJiCBlf7cdOKppL/X0/eF2Fifk+ShGif+xaAcmgucbPIAvhWM5Sc36vDyrd PzaG5AP9Er8NEd9mEp3AZpxUcVgAtP4bFWWcBbqaMXNqZKju5fDTlNe2PYdFO3RjCPd3 J7mL3gllrBCuLW5Pz6iprNroLRErBv67CceV+QmqNdwDxov/+LM47WJmlVKzzNm7vRZB ksDnj/vHpyynpgZIcef9g6C1VJ9RDVzgMg3t5NvW3WNPSwM1AwiMasnzAOfxxnVDMyKd 2OvQ== X-RZG-AUTH: ":Ln4Re0+Ic/6oZXR1YgKryK8brlshOcZlIWs+iCP5vnk6shH+AHjwLuWOHqf3yZdW" X-RZG-CLASS-ID: mo00 Received: from omega.bruno.haible.de by smtp.strato.de (RZmta 47.12.1 DYNA|AUTH) with ESMTPSA id u0aa20x0717231s (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (curve X9_62_prime256v1 with 256 ECDH bits, eq. 3072 bits RSA)) (Client did not present a certificate); Thu, 7 Jan 2021 02:07:02 +0100 (CET) From: Bruno Haible To: libc-alpha@sourceware.org, Paul Eggert Subject: [PATCH 2/5] argp: Don't rely on undefined behaviour of _tolower(). Date: Thu, 7 Jan 2021 02:06:17 +0100 Message-Id: <1609981580-17229-3-git-send-email-bruno@clisp.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1609981580-17229-1-git-send-email-bruno@clisp.org> References: <1609981580-17229-1-git-send-email-bruno@clisp.org> X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bruno Haible Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Patch by Eric Blake . * argp/argp-help.c (hol_entry_cmp): Don't use _tolower on values that are not upper-case. Pass correct range to tolower. Reviewed-by: Adhemerval Zanella --- argp/argp-help.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/argp/argp-help.c b/argp/argp-help.c index f417e12..5844d5b 100644 --- a/argp/argp-help.c +++ b/argp/argp-help.c @@ -780,13 +780,11 @@ hol_entry_cmp (const struct hol_entry *entry1, first, but as they're not displayed, it doesn't matter where they are. */ { - char first1 = short1 ? short1 : long1 ? *long1 : 0; - char first2 = short2 ? short2 : long2 ? *long2 : 0; -#ifdef _tolower - int lower_cmp = _tolower (first1) - _tolower (first2); -#else + unsigned char first1 = short1 ? short1 : long1 ? *long1 : 0; + unsigned char first2 = short2 ? short2 : long2 ? *long2 : 0; + /* Use tolower, not _tolower, since the latter has undefined + behaviour for characters that are not uppercase letters. */ int lower_cmp = tolower (first1) - tolower (first2); -#endif /* Compare ignoring case, except when the options are both the same letter, in which case lower-case always comes first. */ return lower_cmp ? lower_cmp : first2 - first1;