From patchwork Wed Nov 15 06:28:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 79902 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 AF6ED3858C50 for ; Wed, 15 Nov 2023 06:28:41 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 538B73858D20 for ; Wed, 15 Nov 2023 06:28:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 538B73858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 538B73858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700029710; cv=none; b=JZd4qQGQvbyzM6YTwxqHTLRZwlp0fA3ICO6sO7LThTiSiudCeuVM55tr4sC/OyxYnH4Ybah8AdFvxIxauQXJ6iv+EIGC3x5E0xofvaYeveFRAQhsQqUxkCHLs8eykouI5XUZ4HDQyJdp17UdqVw8I7GmaKaKup5Hy8baUv+JDAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700029710; c=relaxed/simple; bh=BiOiuSr2rhWeOf83fesiqTasCpocNVBnWxJcZ0O93N8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=tP0ppTw5tNXJ4e1WTLUgm1V5JZCD2xv6iKVGtymC0XCX+Gj9MH8bUrkL1bdMXni6C31O5Oq+IKNx9vqk7oP2834X4J1uiOEew2o2pwgyVB49dh8VDiv46Qoj/rrK+AAiOSjAOQH9fx7bNhZ3HnI8PuPkRgBlCsbMuFbdXBovJH0= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1700029708; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=UFgN10WZXG+4PUVJ5LmZa+wUaVI85/lYbYuBgwFWoPI=; b=L3QBX2xf3buuqKo7PNRjPEhZHncv2vkxip3rYLBaUCVVqWk8CymUg7JiZcTrOyhkP2fgmS r5NxhANj1skNX/OaVbkzi7EAQrp9sduGKuDkgxXYtTxIG9SrGnC+XT5ju0dboYq5SfVw2c gltYLtgzbNj0wloaQXKWqW8fwtXCWyM= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-608-ptq-33ezM3ydqjvq0rKOXw-1; Wed, 15 Nov 2023 01:28:27 -0500 X-MC-Unique: ptq-33ezM3ydqjvq0rKOXw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C5B2C811E7B; Wed, 15 Nov 2023 06:28:26 +0000 (UTC) Received: from oldenburg.str.redhat.com (unknown [10.2.16.3]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8D9AF25C0; Wed, 15 Nov 2023 06:28:25 +0000 (UTC) From: Florian Weimer To: libc-alpha@sourceware.org Cc: Adhemerval Zanella Subject: [PATCH] stdlib: Avoid another self-comparison in qsort Date: Wed, 15 Nov 2023 07:28:23 +0100 Message-ID: <87o7fvttrs.fsf@oldenburg.str.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org In the insertion phase, we could run off the start of the array if the comparison function never runs zero. In that case, it never finds the initial element that terminates the iteration. Tested on i686-linux-gnu and x86_64-linux-gnu. Reviewed-by: Adhemerval Zanella --- stdlib/qsort.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) base-commit: 323f367cc46b80224d39b082adf7be74b49ed843 diff --git a/stdlib/qsort.c b/stdlib/qsort.c index ad110e8a89..1ea31ff424 100644 --- a/stdlib/qsort.c +++ b/stdlib/qsort.c @@ -217,7 +217,7 @@ insertion_sort_qsort_partitions (void *const pbase, size_t total_elems, while ((run_ptr += size) <= end_ptr) { tmp_ptr = run_ptr - size; - while (cmp (run_ptr, tmp_ptr, arg) < 0) + while (tmp_ptr != base_ptr && cmp (run_ptr, tmp_ptr, arg) < 0) tmp_ptr -= size; tmp_ptr += size;