From nobody Wed Mar 25 00:47:48 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fgStX2k4cz6WSPQ for ; Wed, 25 Mar 2026 00:47:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (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 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fgStX0sZkz3PVd for ; Wed, 25 Mar 2026 00:47:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774399668; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4YCoM6/QsJ++LPcvB1F3mYjNFcgXX1JV8opP0S0eenU=; b=e8HVuBmTPDy1WTJ/Qvdt1XkqSEYY52wXSN3cDolhAfMErTYy6kq++s3GUUpgq+RCmJXkXK WnA/CAK1ue24qo9nEp7cjb+oCrntG0r1T+D6zYICwgT8Cbt+hOtTozaup8reg2G/9qE5HJ th12H/3BVqi+Ab0AmWJ5GAjRZbD9TOldzkdnchD4e9fPhh2PhS6gBXsOTkWHtAkqSM4rBC pSxbFwIgcI9k3fsVCQGYT7BlAylABf7zQQBNiQLisRQZRyqdLUhRIt6emS06k4BDb9+z/2 wS8pTZfSUUYqHktlOIKgs0nz9HCIFStlvl+FpI1ONplve23vFDLP9MLjehRcAA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774399668; a=rsa-sha256; cv=none; b=uXVcj5WD7IjyAQQgl/zBl+E7B6YsUxTcPJJcH32wJzvSQxHlsNJHaKI3dTacr/wB5Pqxin QtNevVVu5Sgj91fAZoEVr9qvbsxI+0PlLgP9rNceUrLAis1YnM9ukVZo10pTT0dyPBvM2J wy1cyna0RnvKHP14aI3Nt9bIM8d/7gWKV28yK7/dgkfgclYNBGBEzrpfwt/t9UZ27hkpOa qy0uZB91KBPCtd6MwINLoy2uNoDX3EeSOynJmCUju70AkRNIwSMgFzZAiqr+AW3fM39qVd d3ogn1guyypnwyTTu32JX38H7YyuVTX54ulpWpHU2f/mTucHygGpyN2GKwyF5g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774399668; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4YCoM6/QsJ++LPcvB1F3mYjNFcgXX1JV8opP0S0eenU=; b=jQ2Avql8QWHTUy7GCXHk71ftadGPpC1sAj2GImCgEKXv8YGMDBqlOkKsO28YfKjb+8xyH2 H4Cteyp0+QEVDgJ3GbEVG1BtkNJprWbf72cGey7CPW9vReMReMVXPHHLUpqUatXwGJOGJp XDDX/i9R4Y525FlJFA1VbZCi6TGDc4JLLrWGxOB2btCU+ljEhjZ/dT8eXRzzykIXDTo2VP N/E8M7h7pP8VNAdgGCFut3G8aeBqTJRaI/PgJuGNRAUSS3PZfQN41yhbs0vZBmeAv55aqD EG5X/Y2soayYc3wM5QaY+t2+lXeEry8MArd4Cigp8Sq3bUv5BMpI5GMRWiOP2Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fgStX0GwhzjmL for ; Wed, 25 Mar 2026 00:47:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3cdf7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 25 Mar 2026 00:47:48 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 151ae090159e - stable/14 - realpath: Improve prev_len logic List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 151ae090159eb2c179926de84cf2fc40d687d2cf Auto-Submitted: auto-generated Date: Wed, 25 Mar 2026 00:47:48 +0000 Message-Id: <69c330b4.3cdf7.46076d22@gitrepo.freebsd.org> The branch stable/14 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=151ae090159eb2c179926de84cf2fc40d687d2cf commit 151ae090159eb2c179926de84cf2fc40d687d2cf Author: Dag-Erling Smørgrav AuthorDate: 2026-03-19 01:26:16 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-03-25 00:47:45 +0000 realpath: Improve prev_len logic * Save prev_len after having checked for and appended a trailing slash, not before. This requires us to back up if we end up returning a partial result, but previously we would sometimes return a partial result with a trailing slash and sometimes without. * Replace strlcat() with a faster strlcpy() since we know exactly how far into the buffer we are. MFC after: 1 week Sponsored by: Klara, Inc. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D55914 (cherry picked from commit 99d295e471bc362a7927047c89472e1ee2d0da6b) --- lib/libc/stdlib/realpath.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/libc/stdlib/realpath.c b/lib/libc/stdlib/realpath.c index f23a3fd8c58e..8fcdd443d2b8 100644 --- a/lib/libc/stdlib/realpath.c +++ b/lib/libc/stdlib/realpath.c @@ -105,7 +105,6 @@ realpath1(const char *path, char *resolved) left_len = 0; } - prev_len = resolved_len; if (resolved[resolved_len - 1] != '/') { if (resolved_len + 1 >= PATH_MAX) { errno = ENAMETOOLONG; @@ -136,7 +135,9 @@ realpath1(const char *path, char *resolved) /* * Append the next path component and lstat() it. */ - resolved_len = strlcat(resolved, next_token, PATH_MAX); + prev_len = resolved_len; + resolved_len += strlcpy(resolved + prev_len, next_token, + PATH_MAX - prev_len); if (resolved_len >= PATH_MAX) { errno = ENAMETOOLONG; return (NULL); @@ -148,8 +149,11 @@ realpath1(const char *path, char *resolved) * directory is not a directory. Rewind the path * to correctly indicate where the error lies. */ - if (errno == EACCES || errno == ENOTDIR) + if (errno == EACCES || errno == ENOTDIR) { + if (prev_len > 1) + prev_len--; resolved[prev_len] = '\0'; + } return (NULL); } if (S_ISLNK(sb.st_mode)) {