Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2216573/?format=api
{ "id": 2216573, "url": "http://patchwork.ozlabs.org/api/patches/2216573/?format=api", "web_url": "http://patchwork.ozlabs.org/project/glibc/patch/20260326201923.3975252-1-linuxoid@gmail.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": "<20260326201923.3975252-1-linuxoid@gmail.com>", "list_archive_url": null, "date": "2026-03-26T20:19:23", "name": "locale: fix memory leaks in write_locales and write_charmaps", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "4c9bca1a4dfb2ce8206b199057549e2b750ce635", "submitter": { "id": 92723, "url": "http://patchwork.ozlabs.org/api/people/92723/?format=api", "name": "Ruslan Valiyev", "email": "linuxoid@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/glibc/patch/20260326201923.3975252-1-linuxoid@gmail.com/mbox/", "series": [ { "id": 497646, "url": "http://patchwork.ozlabs.org/api/series/497646/?format=api", "web_url": "http://patchwork.ozlabs.org/project/glibc/list/?series=497646", "date": "2026-03-26T20:19:23", "name": "locale: fix memory leaks in write_locales and write_charmaps", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/497646/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2216573/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2216573/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\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=JjBSwFXA;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org;\n receiver=patchwork.ozlabs.org)", "sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=JjBSwFXA", "sourceware.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com", "sourceware.org; spf=pass smtp.mailfrom=gmail.com", "server2.sourceware.org;\n arc=none smtp.remote-ip=2a00:1450:4864:20::42c" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org [38.145.34.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 4fhZrQ6n82z1yFp\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 07:19:50 +1100 (AEDT)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 404904B9DB57\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 20:19:48 +0000 (GMT)", "from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com\n [IPv6:2a00:1450:4864:20::42c])\n by sourceware.org (Postfix) with ESMTPS id 7C85F4B9DB42\n for <libc-alpha@sourceware.org>; Thu, 26 Mar 2026 20:19:26 +0000 (GMT)", "by mail-wr1-x42c.google.com with SMTP id\n ffacd0b85a97d-439c6fc2910so927819f8f.0\n for <libc-alpha@sourceware.org>; Thu, 26 Mar 2026 13:19:26 -0700 (PDT)", "from kimsufi.. ([2001:41d0:303:6f54::1])\n by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43b9192e35esm9418934f8f.6.2026.03.26.13.19.24\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 26 Mar 2026 13:19:24 -0700 (PDT)" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org 404904B9DB57", "OpenDKIM Filter v2.11.0 sourceware.org 7C85F4B9DB42" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 7C85F4B9DB42", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 7C85F4B9DB42", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774556366; cv=none;\n b=Hx1NLy6aN8Pfr1UUonPCF9mr7AI4BVURCcBPcqaxN3toX9wPG+8JE2MtBu92zdKEOaxocHfOXdit478+F9Xaci1/nc8Ua804FclHh6+1ufu3s/IsSixU8LO4aJfvxxs7MNV2da19TYDTKZQ1/K1vGpdy6tjNg+4546AdJBKPykk=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1774556366; c=relaxed/simple;\n bh=mwRE45MKlJb6ks1Yin54ZtskI7KLMEI1iiSZ5zGjbWk=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=vl0Lgu5wJvJEB3eKR4lUcscCucmqMyhE6N9J7e3Ex5M1j4Cu/1zyOSYK+NZJxF4LNxSbhyMLgaXK+s46n4htBCz8/wcIs/0/bGNjJydjAPQovzZAVGnx+s45cMljdBBu+sw3nJoFaS48at20S/IK5uyINcWMoFMptk1sPTXBDBA=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1774556365; x=1775161165; darn=sourceware.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=wf6GeyHwagIs33yT5OC64KPl903JzRJHYy6OpqhJt2M=;\n b=JjBSwFXAVglJXCE1W27G10Efb+gfj8KVulZPaQzPVNZxg5VBcThdPKoh+uUshBUWEX\n MZIRs2KcZwyA0IlmhjWlnp2cjX28LFHm2VERqR2tg+BJfj7ICe9c8IGL8MdAWbBRc3z7\n +Aaanxv4Sprc9djS2BDp3qHy268QheReXaPrRBPk0fDbzKaWXHEll+N4aHito3uTjYjs\n VAUdm7d7l9Hay54YrcclGctBKwuBgQ3FA01YAJoYaOIpZe9YL3bslQA1HTXDaKEQd6mi\n 3J/GlLvdhmH3pa0nJlOwPvWmdt6AoT64w6pDKEZYSXilAX5qZbdNTk7UoU6LXxX4z66A\n qs2Q==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774556365; x=1775161165;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=wf6GeyHwagIs33yT5OC64KPl903JzRJHYy6OpqhJt2M=;\n b=fnEyR1p3oHi4MH66aJZPzax6LhzlTzY2r6wC3mo2gIBLJq1Lb6WSd2h+KX0my9a+px\n UkMXdFpxl7tmvlfDsqqpd+Fpq+AsvU2W16Pg+eYGaCGYtYFDr5q8HCO+vhYMa2QTiF99\n pxpbdGuG0z98rTdINYRyUCKtArJt0phjIVbc5LG08DhmQd6Se15Zgnzz7P3KrdX9VAx0\n 4NsRGM97W7pY/SwsbYGaS7pGzGMuYDD03lLbT92q+knb+Arwa5uBEReKCNlBzMVwzoMM\n XQu0tM53YMyre2C9TtfcNEJxRB/ZAsNapoxzDI32f0amIWDNqyQ57fWuTwsrNIxuYMMX\n 8ZVw==", "X-Gm-Message-State": "AOJu0Yx6IA4FJym7WnN7uIDetZs8q3pJl7iRvmuWF2gWGbkWT6/WNIsl\n TjAXkv8ZRwdnarMKU/qRsoUz7u08Pv8TAzC21X1oaZzm04bUDuofS2oyo1soQSAA", "X-Gm-Gg": "ATEYQzzanv7tQZEb/Cj7+j+CM3KBg4ydVwJMlnQwEmM0t50hWsDTnjfxypTde/UbVsv\n qUPyvKzZLC5vflhSD2WP3cH5vktZjKeMvt0wr6sJA08ckrF3FcJE0no0EISPwMMXADwSYsc3XsI\n QeTH8BGZr82E6faYWA2UkSN+lmXIYZ3j3cSQp/tXJV167xpVMkG3mzSt4aqao8+Q/lsskjXmLXA\n WKLF+AoZ+sdrttfHbJsCcpmmEH1oyiCnF3qge24RMATaMjTnRvSqgaOiRy4aDB4QScwsCQKL8Sg\n PJ4iZre1BusLybwbodhDG9E1HVD3ZkgOsmgr2TtqJG2CQBd0WPKbLU3oqvhK+X3ihpLjnEkhdJo\n OEiondZz3ujTE3+0mnLuNajyvp62l5luep1E9iuDMAH6BEEVV3TsePlUoZjHNrQfhg8CQeN08pQ\n ==", "X-Received": "by 2002:a05:6000:2902:b0:439:bc2b:cb57 with SMTP id\n ffacd0b85a97d-43b8899d2d2mr14931813f8f.6.1774556365117;\n Thu, 26 Mar 2026 13:19:25 -0700 (PDT)", "From": "Ruslan Valiyev <linuxoid@gmail.com>", "To": "libc-alpha@sourceware.org", "Cc": "arjun@sourceware.org,\n\tRuslan Valiyev <linuxoid@gmail.com>", "Subject": "[PATCH] locale: fix memory leaks in write_locales and write_charmaps", "Date": "Thu, 26 Mar 2026 20:19:23 +0000", "Message-ID": "<20260326201923.3975252-1-linuxoid@gmail.com>", "X-Mailer": "git-send-email 2.43.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": "Fix multiple memory leaks in the locale program:\n\n1. PUT(xstrdup(...)) leaks when tsearch finds a duplicate entry,\n since tsearch returns the existing node and the newly allocated\n string is orphaned. Introduce PUT_UNIQUE macro that checks with\n GET (tfind) before inserting, freeing the duplicate if it already\n exists.\n\n2. String literals \"POSIX\" and \"C\" passed to PUT cannot be freed\n by tdestroy. Wrap them in xstrdup so tdestroy(all_data, free) is\n safe.\n\n3. Add tdestroy(all_data, free) at the end of write_locales and\n write_charmaps to free the search trees.\n\n4. Free dirents[cnt] entries in the scandir loop (only the dirents\n array pointer was freed, not individual entries).\n\n5. Free alias_path allocated by argz_create_sep in write_locales.\n\nThese leaks were reported by Arjun Shankar via GCC -fanalyzer\n(OpenScanHub/Fedora) and confirmed with valgrind.\n\nResolves: BZ #33972\nSigned-off-by: Ruslan Valiyev <linuxoid@gmail.com>\n---\n locale/programs/locale.c | 35 ++++++++++++++++++++++++++---------\n 1 file changed, 26 insertions(+), 9 deletions(-)", "diff": "diff --git a/locale/programs/locale.c b/locale/programs/locale.c\nindex 15f109f3..396821a1 100644\n--- a/locale/programs/locale.c\n+++ b/locale/programs/locale.c\n@@ -429,10 +429,20 @@ write_locales (void)\n #define GET(name) tfind (name, &all_data, \\\n \t\t\t (int (*) (const void *, const void *)) strcoll)\n \n+ /* Insert NAME into the tree, freeing it if a duplicate exists. */\n+#define PUT_UNIQUE(name) \\\n+ do {\\\n+ char *put_name_ = (name);\\\n+ if (GET (put_name_) != NULL)\\\n+ free (put_name_);\\\n+ else\\\n+ PUT (put_name_);\\\n+ } while (0)\n+\n /* `POSIX' locale is always available (POSIX.2 4.34.3). */\n- PUT (\"POSIX\");\n+ PUT (xstrdup (\"POSIX\"));\n /* And so is the \"C\" locale. */\n- PUT (\"C\");\n+ PUT (xstrdup (\"C\"));\n \n memset (linebuf, '-', sizeof (linebuf) - 1);\n linebuf[sizeof (linebuf) - 1] = '\\0';\n@@ -510,8 +520,9 @@ write_locales (void)\n \n \t /* If the verbose format is not selected we simply\n \t collect the names. */\n-\t PUT (xstrdup (dirents[cnt]->d_name));\n+\t PUT_UNIQUE (xstrdup (dirents[cnt]->d_name));\n \t}\n+ free (dirents[cnt]);\n }\n if (ndirents > 0)\n free (dirents);\n@@ -591,7 +602,7 @@ write_locales (void)\n \n \t\t /* Add the alias. */\n \t\t if (! verbose && GET (value) != NULL)\n-\t\t PUT (xstrdup (alias));\n+\t\t PUT_UNIQUE (xstrdup (alias));\n \t\t}\n \t }\n \n@@ -610,10 +621,14 @@ write_locales (void)\n fclose (fp);\n }\n \n+ free (alias_path);\n+\n if (! verbose)\n {\n twalk (all_data, print_names);\n }\n+\n+ tdestroy (all_data, free);\n }\n \n \n@@ -669,7 +684,7 @@ write_archive_locales (void **all_datap, char *linebuf)\n for (cnt = 0; cnt < head->namehash_size; ++cnt)\n \tif (namehashtab[cnt].locrec_offset != 0)\n \t {\n-\t PUT (xstrdup (addr + namehashtab[cnt].name_offset));\n+\t PUT_UNIQUE (xstrdup (addr + namehashtab[cnt].name_offset));\n \t ++ret;\n \t }\n }\n@@ -694,7 +709,7 @@ write_archive_locales (void **all_datap, char *linebuf)\n \t{\n \t struct locrecent *locrec;\n \n-\t PUT (xstrdup (names[cnt].name));\n+\t PUT_UNIQUE (xstrdup (names[cnt].name));\n \n \t if (cnt)\n \t putchar_unlocked ('\\n');\n@@ -744,19 +759,19 @@ write_charmaps (void)\n char **aliases;\n char **p;\n \n- PUT (xstrdup (dirent));\n+ PUT_UNIQUE (xstrdup (dirent));\n \n aliases = charmap_aliases (CHARMAP_PATH, dirent);\n \n #if 0\n /* Add the code_set_name and the aliases. */\n for (p = aliases; *p; p++)\n-\tPUT (xstrdup (*p));\n+\tPUT_UNIQUE (xstrdup (*p));\n #else\n /* Add the code_set_name only. Most aliases are obsolete. */\n p = aliases;\n if (*p)\n-\tPUT (xstrdup (*p));\n+\tPUT_UNIQUE (xstrdup (*p));\n #endif\n \n charmap_free_aliases (aliases);\n@@ -765,6 +780,8 @@ write_charmaps (void)\n charmap_closedir (dir);\n \n twalk (all_data, print_names);\n+\n+ tdestroy (all_data, free);\n }\n \n /* Print a properly quoted assignment of NAME with VAL, using double\n", "prefixes": [] }