From nobody Wed Mar 25 00:46:57 2026 X-Original-To: dev-commits-src-branches@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 4fgSsZ3w7Fz6WSDW for ; Wed, 25 Mar 2026 00:46:58 +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 4fgSsZ1LLmz3Ncq for ; Wed, 25 Mar 2026 00:46:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774399618; 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=9kR+9UZrrjdIr7cgKx9F+5/B0IBhYWB9Bpm4kDtjvAY=; b=CcZPGewy2hfVmKT/mDgDkl8KwsHQxmKcEHZ4HzwH9bfRwbt1EizkhypbMQ5jivz4NVQuJ3 qn+3Ij4A7miu7/Hwkky0yYSwiQCgURIszE5LjOnstJYxIgzuCAJ6ljxuk90Igm5ygBgtBY uaoZv+qGfzsDl/SWN8gQlh765FVrS2sd33OCfGTMJFmhfEWWNxWWu5fHL5C2sKzjHuob7+ oB692PtkdrNJ9qKOx3LKdPJR9uIJaqD7gODVJn1Hholhiip08qkzoKlhDWD5cDAvb3L6Ju dJVp79HRa2Fz7Qx/SVrKb+W1CusCPV1aYZvudMF2MkA0zpNzhQ1pnDGTQ/ankQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774399618; a=rsa-sha256; cv=none; b=aRQ/X5CTkpBwMs4V2T7WiuGfA1JIBDe39xwR+jYOJn4GzhrxkXwT/CP4HFe05J5zUaKvfz pLkgcPQm3gdG7dcPrdW5xpM6FCoklSRAIcw31RZV/83rqxOrRSMOdYkdjUGB5jKsqsQny7 mSdVC89UPGPS1GboAp8G7aF5koX8Bb1IQ80lal+GfI2ea6p7TLr0ttNpg0yjNK8Tpc1OBW CwEYP1JBXMunMZOqWfs0LMi3TzXtnfmbeWK4D+New8tWaBjNyznJx9aiBNWc3PiCDhCAFF Dvt8lReQSQ+smcY1iZvQ8blG3UcEq4TKrIdbxWpQXGjqzFKVIrFvMgVuob9TEg== 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=1774399618; 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=9kR+9UZrrjdIr7cgKx9F+5/B0IBhYWB9Bpm4kDtjvAY=; b=m0grYH7QouDYKjUqtFgnv2FZ26KgAwDzZrKiw+S+Qdxvs3jnYVXr6H6vEKex1NwdJ9ed4Q ZcWHIYefsBCrVAH/2LZ7M9yAqfQ1K8/S8BDvzDPjNXh2f+AZlZDIzcF3xpMvZLrTsU5AHs HsmPEdkpFSfWyqwQ3g79zh2t0sTBVUIJSIHFVCN6AC94ohE/J2UTLkCLF3Ox6g/wQcxuLN SbMHJzOyhlT6mvBGppzzgnZ1H+esHYDh9JJQJJqqu0cF2iFwqCSY6wbzTouGNcCXxsi5K2 7W9QO2w+rSc8RR/vng4gvtmqACXu0OW/b1utVftDYcjlsgz85omO09IlzQtVtg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fgSsZ0B5TzjnP for ; Wed, 25 Mar 2026 00:46:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b66f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 25 Mar 2026 00:46:57 +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: f174c040a4f3 - stable/15 - realpath: Improve prev_len logic List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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/15 X-Git-Reftype: branch X-Git-Commit: f174c040a4f3e00f9111789d3c9b84aea447a29f Auto-Submitted: auto-generated Date: Wed, 25 Mar 2026 00:46:57 +0000 Message-Id: <69c33081.3b66f.106c1e9a@gitrepo.freebsd.org> The branch stable/15 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=f174c040a4f3e00f9111789d3c9b84aea447a29f commit f174c040a4f3e00f9111789d3c9b84aea447a29f Author: Dag-Erling Smørgrav AuthorDate: 2026-03-19 01:26:16 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-03-25 00:46:43 +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 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)) {