From nobody Thu Mar 19 01:26:53 2026 X-Original-To: dev-commits-src-main@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 4fbp2Q0djBz6VRyV for ; Thu, 19 Mar 2026 01:26:54 +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 4fbp2P5fdJz43gf for ; Thu, 19 Mar 2026 01:26:53 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1773883613; 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=VP9kT1UtBZbph5er9uwlreo9/ACKQbcL8tnVe5ux3eMbJ9sngdGknKfSRP3MCJPJcT9VJY FnK5H9FoejAXKLnuVpD8wOu7YscEB3Zx/fIZOtvBtCsYMcPqwlXkNcGpsS8cHcxvSxSmBV 1+I8O4L43UFxqYezTqk+PPRvFXLLPca8AAxtBriW7hjIJimNgF48tVpHWrC1nVlgCY2JfA oyzbIOBQ7Uqg2ET1OEuosXVOqUrOPG7a8bU9aHXNmLVBi9kUuVYWV4AoFUthTNSpMmuKDq CF73uxoCsuZYjvST/OHgHujugBR/kkJFd+QGZbYP8hZxM1pZ88LR+0bJsuhCzg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1773883613; a=rsa-sha256; cv=none; b=B3GpleAhgh+jFf0svNomlOdu+zYQXQubhv4mEtCg67+fEVdrNG0SV+GUSVYxASw+kbXfe4 FVShYPtb8LFOj0XvgjyjziqvuWsmQIXQYdfLFLgLvFgOs2YtAZgMg5CEjBxLGVXWMwyd4z kLkdbHFVddYr0qGU3E+M/YvdVHQLuW2U7nlAmhiQmGckfmJiUQZv92GIBnhRR+0t67w40A dkwC5IfXvybfimQkz1c70ox2DvOQkAaswLI+S+Mq7sC01GzNDYqFHos7ACEFCF/rt42cis D8BbsRXS3SDlVE8EjLwE5FM1gG/PeKl1Y0hQmDNXicNYIM5DLb0OHP1jsD1YJA== 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=1773883613; 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=rCtypxlBGsyfuV3a6jBgnrnVEhA7IeQDrHoGeI8AyG4ZAlhqqgckKRWj4ybEQr2CIU4Ahf JBv7Ve3m48uJvyuiFITN8be/LIiqugdCuOTfQlDfRll7QIAXZMJvQMq8etr7Zh8QKNkPGZ FJtWFWD1UcKjJRXM9RHc1u+dS+ns6qr3WtmMHX0Rq3Mdp2SoZvYEVOEvvMEklFpkmVc0Uj 9dzPEQcS/Ebg2uF2ghkzpTFm/sGqGTNIDDzVY/xBNHfS9RG5WSzxLRHTT4uIhqk4v8wfsA Jt5kNcIelKLkhzPBC54/Dcao6TVF5HYk9iW1Qi1OlmVdKBDPerGoptKQSgTaHg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fbp2P52pfzZl5 for ; Thu, 19 Mar 2026 01:26:53 +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 the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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)) {