From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from hedgehog.birch.relay.mailchannels.net (hedgehog.birch.relay.mailchannels.net [23.83.209.81]) by sourceware.org (Postfix) with ESMTPS id 8BDFB3858C2C for ; Thu, 24 Mar 2022 06:47:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8BDFB3858C2C X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 2CE684C27EA; Thu, 24 Mar 2022 06:47:37 +0000 (UTC) Received: from pdx1-sub0-mail-a305.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id B94A14C28F1; Thu, 24 Mar 2022 06:47:36 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1648104456; a=rsa-sha256; cv=none; b=vEL8xepYFXiyZgXdlaPK4Vwnje39YbHF991q0g7x05fALZo9F/ECQmCsu7FKf7Gj9qA1oj rRD8v533EM/pTRLGWh4g3J3uDe0BpOOdFloViYKc4VuNo6ayk92GWp4J3BBcNekM9p+o7D 5vNHj3GLM0YLSE9kLp2OjNg6Rj7aU/9O96984uoevIELm0BkC2Ku2trK1a4avYKLt1y+0U kzoosVVLYTodnzQ+ETfr85Q+mWPwlWVxWk0KJ2ivi/KtgnGQyYWfTB7xiK2YKoAqBIkp4d LSIzEvaAKDmxp2LQqUCfzQZvMSFZnoCk3Oe5nHz1b2ejM2BtvNMYgdAlk4uCkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1648104456; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=+G/D5HQ3HurVe6scGki5ARTAOEetWHiwQhZAcC/qgDs=; b=+QXK1zIoRmrzz5NYgOKWczocR5GOrJGr1w1w9qDqWuqRyx5dSB31Si1TVj2WfoBg8y3NNo JVaAr70Irw0WBnIrCY6sX8hwnVVKJg1DiYB3lRI3hsYussAZagSrCC47NnxWYSuRVUPwW8 UPc4lmcsLULZncLk67V+EtiWu0T9YMLkr4TAdkeUehMVmuJf1/c3xa44HFZpKze0SebKeD R2Paqs/LzJyxpvA0Dp/LzSSEMGLytZplcWvPRiuRG3H3TDCqSgqZbMJ+eP4+TdiRXfcjPY b9ON57w7sPWtLqhHwl+Lo5gY4KZ4jy8s6frVie2zq8YpIkzNcdBhavwHdXRfYw== ARC-Authentication-Results: i=1; rspamd-548fb75c45-r8bsp; auth=pass smtp.auth=dreamhost smtp.mailfrom=siddhesh@sourceware.org X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from pdx1-sub0-mail-a305.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.124.238.100 (trex/6.5.3); Thu, 24 Mar 2022 06:47:37 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Callous-Interest: 7732c7337ee4f92d_1648104457041_2475889155 X-MC-Loop-Signature: 1648104457041:3511035879 X-MC-Ingress-Time: 1648104457041 Received: from rhbox.. (unknown [106.220.190.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a305.dreamhost.com (Postfix) with ESMTPSA id 4KPG4Q3f77z3P; Wed, 23 Mar 2022 23:47:34 -0700 (PDT) From: Siddhesh Poyarekar To: libc-alpha@sourceware.org Cc: adhemerval.zanella@linaro.org, Iker Pedrosa Subject: [PATCH] realpath: Bring back GNU extension on ENOENT and EACCES [BZ #28996] Date: Thu, 24 Mar 2022 12:17:30 +0530 Message-Id: <20220324064730.1415758-1-siddhesh@sourceware.org> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1172.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_NONE, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NEUTRAL, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: , X-List-Received-Date: Thu, 24 Mar 2022 06:47:40 -0000 The GNU extension for realpath states that if the path resolution fails with ENOENT or EACCES and the resolved buffer is non-NULL, it will contain part of the path that failed resolution. commit 949ad78a189194048df8a253bb31d1d11d919044 broke this when it omitted the copy on failure. Bring it back partially to continue supporting this GNU extension. Resolves: BZ #28996 Signed-off-by: Siddhesh Poyarekar --- stdlib/canonicalize.c | 9 ++++++--- stdlib/test-canon.c | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/stdlib/canonicalize.c b/stdlib/canonicalize.c index 6237a41d42..e6566bd7d9 100644 --- a/stdlib/canonicalize.c +++ b/stdlib/canonicalize.c @@ -400,11 +400,14 @@ realpath_stk (const char *name, char *resolved, error: *dest++ = '\0'; - if (!failed && resolved != NULL) + if (resolved != NULL) { - if (dest - rname <= get_path_max ()) + /* Copy the full result on success or partial result if failure was due + to the path not existing or not being accessible. */ + if ((!failed || errno == ENOENT || errno == EACCES) + && dest - rname <= get_path_max ()) rname = strcpy (resolved, rname); - else + else if (!failed) { failed = true; __set_errno (ENAMETOOLONG); diff --git a/stdlib/test-canon.c b/stdlib/test-canon.c index 2ad1218749..a9c83be17c 100644 --- a/stdlib/test-canon.c +++ b/stdlib/test-canon.c @@ -174,8 +174,8 @@ do_test (int argc, char ** argv) continue; } - /* Only on success verify that buf contains the result too. */ - if (result != NULL + /* Verify buf contents if the call succeeded or failed with ENOENT. */ + if ((result != NULL || errno == ENOENT) && !check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved)) { printf ("%s: flunked test %d (expected resolved `%s', got `%s')\n", -- 2.35.1