From nobody Thu Mar 19 01:26:53 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 4fbp2W0l19z6VRn6 for ; Thu, 19 Mar 2026 01:26:59 +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 4fbp2V6kbzz43fK for ; Thu, 19 Mar 2026 01:26:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1773883619; 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=XpPXQtPLvOWMUynAqYRSlamUCphYfuge0xQJY2B0oVk=; b=nBfh6IcUOXqwI/r5zAE6opqH1inHjhiXnHWlvjkcUq5SmckeG8zdXjrmGZ8AxxJB0Fdl9a VUWWgVCTJhkiAB6malS5SmVFj+wMG0U6fsWDXCkwFmOAQeCxKVRsYcjhPzJmzgoHoWJvWy lzoXT/H74FtODvPebocKklqthVdowqXQ1RAhXEdm8PlXcpZa1LAE4tTn94L7K8+Snk19+W 8qJ2CLW2BRsTa0Cr/tx5dQge/nWyps5nl61pJxyVuXCrzH273nGtkqxCyt9L0AM8Pfa661 4hi5lIeXwyvNYSl/3ttgP8/e5+vlCZjLg8Jw1GqHuMy9dPetkcPsK0k79PknRQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1773883619; a=rsa-sha256; cv=none; b=LVQbKwdo2c1NODmriwuqx8pE7TwKQr/xgMi3KwcDdPo3b7EbH2joUHIplSDrtYUtMMJSVZ wOaVP/WqyFmKff7LPdjHwJBmb7w0iUVJQnbSW4tue8hq6OU7Pe1HveUcisa5/tYtyCk1Si A3y93P3G20U8sC6NlCFgAc1udU9QqvmatJgrgselqWDFm9BrtSFZ44a5Qx9VX0cbHlgchd eGVh2WTEo2OQFbsRiGo8o8uhw7dL/tP7QI/ae+RjxGjmkAuu0zMNsBOjJNOhsBmfpN5DOo K9fk3KEdpI5pWC2CkpwxNIV99QZN3BkD1aUMp2Aspf518njzkCj+R6O9a7+3xg== 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=1773883619; 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=XpPXQtPLvOWMUynAqYRSlamUCphYfuge0xQJY2B0oVk=; b=my4J2iAsNjSRR3Wy6ZdkgVSdRmoGkhcH1UOPUwqOPL7OOdzRaMl3tWtSmfypcwE1r5h69J urA6dYz5mWF5T++Kj1SGyTsVk+GY3sXK1ycBwKzgTTshmIICdOT5DVUlijSp+ZIMZ6KJD+ 2XW82KfIYTXKF+WvqLIKkdcmhuMPn0TGUvCl7+ma0MUicX4nkVEHCtA1aSXEDwlx/zAJ74 8eNfnw5ZAIrBzFIKA5CroARGXwa4Clh8d1wUCIucT0OQXaA4b7JX7hcjKA78fXn/tXYeU3 OZyTnAjZjp1sGsCtu0DTbjIRvfAmiUSzd3we7AHfxstTN9OziyEOTwNuSkRoOw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fbp2V66bYzZj4 for ; Thu, 19 Mar 2026 01:26:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3f0d7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 19 Mar 2026 01:26:53 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 99d295e471bc - main - 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/main X-Git-Reftype: branch X-Git-Commit: 99d295e471bc362a7927047c89472e1ee2d0da6b Auto-Submitted: auto-generated Date: Thu, 19 Mar 2026 01:26:53 +0000 Message-Id: <69bb50dd.3f0d7.5ab3829b@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=99d295e471bc362a7927047c89472e1ee2d0da6b commit 99d295e471bc362a7927047c89472e1ee2d0da6b Author: Dag-Erling Smørgrav AuthorDate: 2026-03-19 01:26:16 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-03-19 01:26:34 +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 --- 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 18f29e95ee6b..9dc0cc4d3dd4 100644 --- a/lib/libc/stdlib/realpath.c +++ b/lib/libc/stdlib/realpath.c @@ -98,7 +98,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; @@ -129,7 +128,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); @@ -141,8 +142,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)) {