From nobody Wed Mar 25 00:46:57 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 4fgSsg43zYz6WSKD for ; Wed, 25 Mar 2026 00:47:03 +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 4fgSsg0Krsz3Nr7 for ; Wed, 25 Mar 2026 00:47:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774399623; 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=iwYsYJ6pIOMSqbGIxTx0tfJyqiw6Uv0Pf6g2g+4XwWI9eN9PDh3qiZ979esAMH3auuO+nM qQYF2jl8oistWHEbx6Sza02hmeWUNTxNpOLOKXbOix0mIMi4z4rCDAgdQ3MbjZ/a7Asfes sEjnDHV5fdVlaY5gBpbRQtAI2nVtabnVRZlugoZc+qiYmlajKvZbd0tWh/Inr39/tA38Kn 311k4LgywCsEkZ+pMQUsQ3pSmHHHKJFnaA9temumVCIGVoJGmGyEfDimPjzDbgxfIK9hhF Dpknp7LsCiBJkitOyWOi4Muo5W71vqz12wcop0C5D3s0J7irpkwy24Eb65kR5A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774399623; a=rsa-sha256; cv=none; b=ram1xeYADk4O+0HcO+HRZCoOsF+qnb0zrsJJePXl6T3m0wq2LksryNNE6ruZcstqlKBMbN OVFK39ExR5VxUzJ2+N3ZGj0vJWuJp4lPpbxrKO40BuXlZY/pROc843Bq/MNEXzk9eAOIpF vkzSgbX8sn1EV9L+u/COJlDPqyDK55mCQIIXHsRJqJDDqbpRnriKP+pekRdkCzPXr7xXgT np7tXuw63x8MZ95amW6PCSgGD/p8wdHx2XB1eLJthIBOsA5RI2F4mp9aqZQ7rqMOs5O6dS LygJ6e4YYNqXgEhiaB5Aav8i/ygdZZmXXkj0TI/6xP+cVFfchiwCeSq7fZAD5Q== 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=1774399623; 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=Y13U97VNvIMbUryy2as1+t2Hwyu2YfihT2Y5qs4c7QT2w5Fz6wqveHfkdCybE9kfROzggY MIVHDwaCTqwuymuvxxLOIBsRKmc9zJ5/vnx3CeHkganfnrZZ34vwyWmwbka9t5ZEeEfWAK MCj5gEJMwImrlMIXfhWUNqbmmZVmmhJktupibnNc+D1xWEqi4DAADEUVnmhqbh1movo7TB LJ3ha/e9c00R3foMsSXlIezGbD22qq6/rZFARb482ybd/5/xy3bsYDRG+7mhmB8fe6Xsjm CNiG7vtcDvMF2Z/kohB/V0mwBC84C6/st/A7k7ZaQTsUC96tSn+9acmOJj8YDw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fgSsf6mcszjb9 for ; Wed, 25 Mar 2026 00:47:02 +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: 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/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)) {