Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2196416/?format=api
{ "id": 2196416, "url": "http://patchwork.ozlabs.org/api/patches/2196416/?format=api", "web_url": "http://patchwork.ozlabs.org/project/glibc/patch/20260213194113.3866662-1-P@draigBrady.com/", "project": { "id": 41, "url": "http://patchwork.ozlabs.org/api/projects/41/?format=api", "name": "GNU C Library", "link_name": "glibc", "list_id": "libc-alpha.sourceware.org", "list_email": "libc-alpha@sourceware.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260213194113.3866662-1-P@draigBrady.com>", "list_archive_url": null, "date": "2026-02-13T19:41:13", "name": "posix: execvpe: skip $PATH components that are too long [BZ #33626]", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "a25b37a7869fd4d8644c3697fa003fbe4cf962bd", "submitter": { "id": 1430, "url": "http://patchwork.ozlabs.org/api/people/1430/?format=api", "name": "Pádraig Brady", "email": "P@draigBrady.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/glibc/patch/20260213194113.3866662-1-P@draigBrady.com/mbox/", "series": [ { "id": 492134, "url": "http://patchwork.ozlabs.org/api/series/492134/?format=api", "web_url": "http://patchwork.ozlabs.org/project/glibc/list/?series=492134", "date": "2026-02-13T19:41:13", "name": "posix: execvpe: skip $PATH components that are too long [BZ #33626]", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/492134/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2196416/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2196416/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "libc-alpha@sourceware.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "libc-alpha@sourceware.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org;\n receiver=patchwork.ozlabs.org)", "sourceware.org; dmarc=none (p=none dis=none)\n header.from=draigBrady.com", "sourceware.org; spf=none smtp.mailfrom=draigBrady.com", "server2.sourceware.org;\n arc=none smtp.remote-ip=52.210.84.128" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fCMyJ05wjz1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 14 Feb 2026 06:42:26 +1100 (AEDT)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 6E6104BAD149\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 13 Feb 2026 19:42:24 +0000 (GMT)", "from mail.magicbluesmoke.com (smtp.magicbluesmoke.com\n [52.210.84.128])\n by sourceware.org (Postfix) with ESMTPS id C400F4B9DB5B\n for <libc-alpha@sourceware.org>; Fri, 13 Feb 2026 19:42:03 +0000 (GMT)", "from carbon3 (86-44-210-62-dynamic.agg2.lod.rsl-rtd.eircom.net\n [86.44.210.62])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n (No client certificate requested)\n by mail.magicbluesmoke.com (Postfix) with ESMTPSA id A6631453D6E;\n Fri, 13 Feb 2026 19:42:02 +0000 (UTC)" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org 6E6104BAD149", "OpenDKIM Filter v2.11.0 sourceware.org C400F4B9DB5B" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org C400F4B9DB5B", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org C400F4B9DB5B", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1771011723; cv=none;\n b=MMi2El4z1tmtM8gQIdaCXI5LUuc8Njfjl9NfIza4t+i51aCkNAJ+vghB9ASqMUhMnq0VAmloU2eutooSpBpzcyRPYonzMyNmlzsVG4GI6OgKIHTqHoxvPAQPCmXrZQz79oHKJPvcrL45mWho2p8jFkRydmydRtKVx6mCw3BKe/M=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1771011723; c=relaxed/simple;\n bh=+ot+s85QQCFy7JOy9beu/iDeOuSQkDx8/tC+Ee5uSNc=;\n h=From:To:Subject:Date:Message-ID:MIME-Version;\n b=oNC+4K0WFop21YHhzpq283a7MRGU72iHuaZWLWDVUUZRr2X798F7nnMW+7Pt7rzkItANDq+kMAbgJ50Jw7mAzrV1sIgBqd3eh7Ema9hOA9lxGyCa+A99xUVD/Ct7Yb6uZU8BPTkzciarcfzaiIcJpbf2cXx8EwVH5QEwP5U4Agk=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "From": "=?utf-8?q?P=C3=A1draig_Brady?= <P@draigBrady.com>", "To": "libc-alpha@sourceware.org", "Cc": "=?utf-8?q?P=C3=A1draig_Brady?= <P@draigBrady.com>", "Subject": "[PATCH] posix: execvpe: skip $PATH components that are too long [BZ\n #33626]", "Date": "Fri, 13 Feb 2026 19:41:13 +0000", "Message-ID": "<20260213194113.3866662-1-P@draigBrady.com>", "X-Mailer": "git-send-email 2.52.0", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-BeenThere": "libc-alpha@sourceware.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Libc-alpha mailing list <libc-alpha.sourceware.org>", "List-Unsubscribe": "<https://sourceware.org/mailman/options/libc-alpha>,\n <mailto:libc-alpha-request@sourceware.org?subject=unsubscribe>", "List-Archive": "<https://sourceware.org/pipermail/libc-alpha/>", "List-Post": "<mailto:libc-alpha@sourceware.org>", "List-Help": "<mailto:libc-alpha-request@sourceware.org?subject=help>", "List-Subscribe": "<https://sourceware.org/mailman/listinfo/libc-alpha>,\n <mailto:libc-alpha-request@sourceware.org?subject=subscribe>", "Errors-To": "libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org" }, "content": "* posix/execvpe.c (__execvpe_common): Rather than error out\nwith ENAMETOOLONG, just ignore and try the next path.\nNote we know the FILE length is <= NAME_MAX, so the ENAMETOOLONG\nalmost certainly pertains to the current $PATH entry.\n* posix/tst-execvpe7.c: A new test based on tst-execvp3.c.\n* posix/Makefile: Reference the new test.\n---\n posix/Makefile | 1 +\n posix/execvpe.c | 3 ++\n posix/tst-execvpe7.c | 74 ++++++++++++++++++++++++++++++++++++++++++++\n 3 files changed, 78 insertions(+)\n create mode 100644 posix/tst-execvpe7.c", "diff": "diff --git a/posix/Makefile b/posix/Makefile\nindex f377948462..ec28b9e1da 100644\n--- a/posix/Makefile\n+++ b/posix/Makefile\n@@ -277,6 +277,7 @@ tests := \\\n tst-execvpe4 \\\n tst-execvpe5 \\\n tst-execvpe6 \\\n+ tst-execvpe7 \\\n tst-fexecve \\\n tst-fnmatch \\\n tst-fnmatch2 \\\ndiff --git a/posix/execvpe.c b/posix/execvpe.c\nindex 29e8bcd3d1..ec56e297b0 100644\n--- a/posix/execvpe.c\n+++ b/posix/execvpe.c\n@@ -157,6 +157,9 @@ __execvpe_common (const char *file, char *const argv[], char *const envp[],\n \t /* Those errors indicate the file is missing or not executable\n \t by us, in which case we want to just try the next path\n \t directory. */\n+\t case ENAMETOOLONG:\n+\t /* We've already verified that the FILE length is < NAME_MAX,\n+\t so this implies a path component is too long, so skip it. */\n \t case ENODEV:\n \t case ETIMEDOUT:\n \t /* Some strange filesystems like AFS return even\ndiff --git a/posix/tst-execvpe7.c b/posix/tst-execvpe7.c\nnew file mode 100644\nindex 0000000000..d6d9d70c4e\n--- /dev/null\n+++ b/posix/tst-execvpe7.c\n@@ -0,0 +1,74 @@\n+/* Check execvpe does not fail when encountering long $PATH components.\n+ Copyright (C) 2016-2025 Free Software Foundation, Inc.\n+ This file is part of the GNU C Library.\n+\n+ The GNU C Library is free software; you can redistribute it and/or\n+ modify it under the terms of the GNU Lesser General Public\n+ License as published by the Free Software Foundation; either\n+ version 2.1 of the License, or (at your option) any later version.\n+\n+ The GNU C Library is distributed in the hope that it will be useful,\n+ but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n+ Lesser General Public License for more details.\n+\n+ You should have received a copy of the GNU Lesser General Public\n+ License along with the GNU C Library; if not, see\n+ <https://www.gnu.org/licenses/>. */\n+\n+#include <stdlib.h>\n+#include <libgen.h>\n+#include <limits.h>\n+\n+#include <support/capture_subprocess.h>\n+#include <support/check.h>\n+#include <support/support.h>\n+#include <support/temp_file.h>\n+#include <support/test-driver.h>\n+#include <support/xunistd.h>\n+\n+static char *fname;\n+\n+static void\n+do_prepare (int c, char** argv)\n+{\n+ int fd;\n+ TEST_VERIFY_EXIT ((fd = create_temp_file (\"testscript\", &fname)) != -1);\n+\n+ dprintf (fd, \"echo foo\\n\");\n+ TEST_VERIFY_EXIT (fchmod (fd, 0700) == 0);\n+ xclose (fd);\n+}\n+#define PREPARE do_prepare\n+\n+static void\n+run_execvpe (void *closure)\n+{\n+ char *argv[] = { fname, NULL };\n+ execvpe (basename (fname), argv, NULL);\n+\n+ support_record_failure ();\n+}\n+\n+static int\n+do_test (void)\n+{\n+ /* Linux 6.17 at least will give ENAMETOOLONG once any\n+ path component is > NAME_MAX, so ensure we skip such paths\n+ rather than failing. [BZ #33626] */\n+ char *path = xasprintf (\"%*s:%s\", NAME_MAX+1, \"\", test_dir);\n+ TEST_VERIFY_EXIT (setenv (\"PATH\", path, 1) == 0);\n+ free (path);\n+\n+ struct support_capture_subprocess result\n+ = support_capture_subprocess (run_execvpe, NULL);\n+ support_capture_subprocess_check (&result, \"execvpe\", 0, sc_allow_stdout);\n+\n+ TEST_COMPARE_STRING (result.out.buffer, \"foo\\n\");\n+\n+ support_capture_subprocess_free (&result);\n+\n+ return 0;\n+}\n+\n+#include <support/test-driver.c>\n", "prefixes": [] }