get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2230320/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2230320,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2230320/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/glibc/patch/20260429145934.278803-2-fberat@redhat.com/",
    "project": {
        "id": 41,
        "url": "http://patchwork.ozlabs.org/api/1.1/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": ""
    },
    "msgid": "<20260429145934.278803-2-fberat@redhat.com>",
    "date": "2026-04-29T14:59:33",
    "name": "[1/2] libio: Fix gconv module reference counter overflow in swscanf",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "04c640d82783c029783271d67da60c676e84dbbb",
    "submitter": {
        "id": 84672,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/84672/?format=api",
        "name": "Frédéric Bérat",
        "email": "fberat@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/glibc/patch/20260429145934.278803-2-fberat@redhat.com/mbox/",
    "series": [
        {
            "id": 502092,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/502092/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/glibc/list/?series=502092",
            "date": "2026-04-29T14:59:33",
            "name": "Fix gconv reference count overflow in swscanf",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/502092/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2230320/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2230320/checks/",
    "tags": {},
    "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 (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=R8A+BnBG;\n\tdkim-atps=neutral",
            "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;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=R8A+BnBG",
            "sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com",
            "sourceware.org; spf=pass smtp.mailfrom=redhat.com",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124"
        ],
        "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 4g5L875NTjz1yHX\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 01:00:23 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id D83724BA23CB\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 15:00:21 +0000 (GMT)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id 6D67F4BA2E2E\n for <libc-alpha@sourceware.org>; Wed, 29 Apr 2026 14:59:50 +0000 (GMT)",
            "from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-433-HmiBcMq3NVCknNr7cnJIIg-1; Wed,\n 29 Apr 2026 10:59:49 -0400",
            "from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 4740F195608F; Wed, 29 Apr 2026 14:59:44 +0000 (UTC)",
            "from Nymeria-redhat.redhat.com (unknown [10.44.32.149])\n by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id A201A1800480; Wed, 29 Apr 2026 14:59:42 +0000 (UTC)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org D83724BA23CB",
            "OpenDKIM Filter v2.11.0 sourceware.org 6D67F4BA2E2E"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 6D67F4BA2E2E",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 6D67F4BA2E2E",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777474790; cv=none;\n b=KlCdwty/SFYH9vYxBs2Nkux5U5Uz47c7a3ceLr0BWjqp2rxp+N2GWSA+Gx+iBs9ljwUr8PKSs3oMjHTESRjf6qwEIBvvOPO6fa1UDRV2KF2M53K69XBtmhePGV7MGvaYj/CVMECrzaUVCjIeuhvqH3xymjK7lf/bOvKl5PdK6tg=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777474790; c=relaxed/simple;\n bh=20HzRTC0k+cc+pR2Oql56w39UaqHMBJCsaLihYFfYaQ=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=aEBigrzemaLMoylEj6W5aWH5NNB0ktzgL7U0lQAnSizsJSCpMIYPygWgKEZN37i/HZIFbYqWfqt7gaoBw43Swjm3pvw3r+0Ah+n9kS6SafbEdNTrpOUOtp5EPcoO1sYeaXhbczGS/disLPUBkIHC9Rkk9oWF2ZsCMH6TzKqAbew=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1777474790;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=pZeV9YLpI2mKERts7jQvSHKyXhY2oFfrY6XesaX46D4=;\n b=R8A+BnBGBkD1eEpy9cfkSRXtGBZTJAB+xFr8qmYBlJ+VkB3C1gKBJPK3kNb0uOogglXNlU\n NWOLiEa/Y6sFNNPDvxf9NaJSLyj2ag1ZkamUsF0CeHdKxqcoYssXxTPLZk++9rXYrT3AYO\n RfYSUP+2S3ZNJdL0CzalOTvcPHLNy80=",
        "X-MC-Unique": "HmiBcMq3NVCknNr7cnJIIg-1",
        "X-Mimecast-MFC-AGG-ID": "HmiBcMq3NVCknNr7cnJIIg_1777474784",
        "From": "=?utf-8?b?RnLDqWTDqXJpYyBCw6lyYXQ=?= <fberat@redhat.com>",
        "To": "libc-alpha@sourceware.org, dj@redhat.com, fweimer@redhat.com,\n adhemerval.zanella@linaro.org",
        "Subject": "[PATCH 1/2] libio: Fix gconv module reference counter overflow in\n swscanf",
        "Date": "Wed, 29 Apr 2026 16:59:33 +0200",
        "Message-ID": "<20260429145934.278803-2-fberat@redhat.com>",
        "In-Reply-To": "<20260429145934.278803-1-fberat@redhat.com>",
        "References": "<20260429145934.278803-1-fberat@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.93",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "PqO6qr-GbKQrY0V5fluZrGMqkzFz0K2iPIetBGHc5Rw_1777474784",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "content-type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "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": "The swscanf family of functions creates a wide-oriented FILE stream\non the stack. Initialization of this stream invokes `_IO_fwide`, which\nclones the global locale's gconv transformation steps via\n`__wcsmbs_clone_conv`. This increments the reference counter (`__counter`)\nof the gconv module.\n\nBecause the FILE stream is stack-allocated, `fclose` cannot be called,\nand so `__gconv_release_step` is never invoked. The counter leaks,\neventually hitting the 32-bit integer overflow limit and aborting the\nprocess.\n\nTo resolve this, we introduce `_IO_wstrfile_fclose_stack`, a dedicated\ncleanup function for stack-allocated FILE streams. This function invokes\n`_IO_FINISH` and correctly releases the gconv steps via\n`__gconv_release_step` without attempting to `free` the FILE pointer.\nThis cleanup function is then hooked into all variants of swscanf right\nbefore they return.\n---\n libio/iofwide.c                                   | 15 +++++++++++++++\n libio/iovswscanf.c                                |  4 +++-\n libio/libioP.h                                    |  1 +\n libio/swscanf.c                                   |  2 +-\n .../ldbl-128ibm-compat/ieee128-isoc23_swscanf.c   |  2 +-\n .../ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c  |  4 +++-\n .../ldbl-128ibm-compat/ieee128-isoc99_swscanf.c   |  2 +-\n .../ldbl-128ibm-compat/ieee128-isoc99_vswscanf.c  |  4 +++-\n .../ieee754/ldbl-128ibm-compat/ieee128-swscanf.c  |  2 +-\n .../ieee754/ldbl-128ibm-compat/ieee128-vswscanf.c |  4 +++-\n sysdeps/ieee754/ldbl-opt/nldbl-compat.c           | 12 +++++++++---\n wcsmbs/isoc23_swscanf.c                           |  2 +-\n wcsmbs/isoc23_vswscanf.c                          |  4 +++-\n wcsmbs/isoc99_swscanf.c                           |  2 +-\n wcsmbs/isoc99_vswscanf.c                          |  4 +++-\n 15 files changed, 49 insertions(+), 15 deletions(-)",
    "diff": "diff --git a/libio/iofwide.c b/libio/iofwide.c\nindex 8e71fdd21b..d016aa33ea 100644\n--- a/libio/iofwide.c\n+++ b/libio/iofwide.c\n@@ -251,3 +251,18 @@ __libio_codecvt_length (struct _IO_codecvt *codecvt, __mbstate_t *statep,\n \n   return result;\n }\n+\n+void\n+_IO_wstrfile_fclose_stack (FILE *fp)\n+{\n+  _IO_FINISH (fp);\n+  if (fp->_mode > 0)\n+    {\n+      struct _IO_codecvt *cc = fp->_codecvt;\n+\n+      __libc_lock_lock (__gconv_lock);\n+      __gconv_release_step (cc->__cd_in.step);\n+      __gconv_release_step (cc->__cd_out.step);\n+      __libc_lock_unlock (__gconv_lock);\n+    }\n+}\ndiff --git a/libio/iovswscanf.c b/libio/iovswscanf.c\nindex a97f4eed1e..986d94178d 100644\n--- a/libio/iovswscanf.c\n+++ b/libio/iovswscanf.c\n@@ -38,6 +38,8 @@ __vswscanf (const wchar_t *string, const wchar_t *format, va_list args)\n   _IO_strfile sf;\n   struct _IO_wide_data wd;\n   FILE *f = _IO_strfile_readw (&sf, &wd, string);\n-  return __vfwscanf_internal (f, format, args, 0);\n+  int done = __vfwscanf_internal (f, format, args, 0);\n+  _IO_wstrfile_fclose_stack (f);\n+  return done;\n }\n ldbl_weak_alias (__vswscanf, vswscanf)\ndiff --git a/libio/libioP.h b/libio/libioP.h\nindex 1485d22619..1d4217e82a 100644\n--- a/libio/libioP.h\n+++ b/libio/libioP.h\n@@ -645,6 +645,7 @@ extern FILE* _IO_new_file_fopen (FILE *, const char *, const char *,\n \t\t\t\t     int);\n extern void _IO_no_init (FILE *, int, int, struct _IO_wide_data *,\n \t\t\t const struct _IO_jump_t *) __THROW;\n+extern void _IO_wstrfile_fclose_stack (FILE *) attribute_hidden;\n extern void _IO_new_file_init_internal (struct _IO_FILE_plus *)\n   __THROW attribute_hidden;\n extern FILE* _IO_new_file_setbuf (FILE *, char *, ssize_t);\ndiff --git a/libio/swscanf.c b/libio/swscanf.c\nindex d36ef48258..583253a7dc 100644\n--- a/libio/swscanf.c\n+++ b/libio/swscanf.c\n@@ -37,7 +37,7 @@ __swscanf (const wchar_t *s, const wchar_t *format, ...)\n   va_start (arg, format);\n   done = __vfwscanf_internal (f, format, arg, 0);\n   va_end (arg);\n-\n+  _IO_wstrfile_fclose_stack (f);\n   return done;\n }\n ldbl_strong_alias (__swscanf, swscanf)\ndiff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c\nindex 6b3915357f..2e95cdf010 100644\n--- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c\n+++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_swscanf.c\n@@ -35,7 +35,7 @@ ___ieee128_isoc23_swscanf (const wchar_t *string, const wchar_t *format, ...)\n   va_start (ap, format);\n   done = __vfwscanf_internal (fp, format, ap, mode_flags);\n   va_end (ap);\n-\n+  _IO_wstrfile_fclose_stack (fp);\n   return done;\n }\n strong_alias (___ieee128_isoc23_swscanf, __isoc23_swscanfieee128)\ndiff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c\nindex 295321147c..857903b2a6 100644\n--- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c\n+++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc23_vswscanf.c\n@@ -28,6 +28,8 @@ ___ieee128_isoc23_vswscanf (wchar_t *string, const wchar_t *format, va_list ap)\n   FILE *fp = _IO_strfile_readw (&sf, &wd, string);\n   int mode_flags =\n     SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST | SCANF_LDBL_USES_FLOAT128;\n-  return __vfwscanf_internal (fp, format, ap, mode_flags);\n+  int done = __vfwscanf_internal (fp, format, ap, mode_flags);\n+  _IO_wstrfile_fclose_stack (fp);\n+  return done;\n }\n strong_alias (___ieee128_isoc23_vswscanf, __isoc23_vswscanfieee128)\ndiff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc99_swscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc99_swscanf.c\nindex 19b71940dd..2280bae1d0 100644\n--- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc99_swscanf.c\n+++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc99_swscanf.c\n@@ -34,7 +34,7 @@ ___ieee128_isoc99_swscanf (const wchar_t *string, const wchar_t *format, ...)\n   va_start (ap, format);\n   done = __vfwscanf_internal (fp, format, ap, mode_flags);\n   va_end (ap);\n-\n+  _IO_wstrfile_fclose_stack (fp);\n   return done;\n }\n strong_alias (___ieee128_isoc99_swscanf, __isoc99_swscanfieee128)\ndiff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc99_vswscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc99_vswscanf.c\nindex a1b51cb5b6..21cf25610a 100644\n--- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc99_vswscanf.c\n+++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-isoc99_vswscanf.c\n@@ -27,6 +27,8 @@ ___ieee128_isoc99_vswscanf (wchar_t *string, const wchar_t *format, va_list ap)\n   struct _IO_wide_data wd;\n   FILE *fp = _IO_strfile_readw (&sf, &wd, string);\n   int mode_flags = SCANF_ISOC99_A | SCANF_LDBL_USES_FLOAT128;\n-  return __vfwscanf_internal (fp, format, ap, mode_flags);\n+  int done = __vfwscanf_internal (fp, format, ap, mode_flags);\n+  _IO_wstrfile_fclose_stack (fp);\n+  return done;\n }\n strong_alias (___ieee128_isoc99_vswscanf, __isoc99_vswscanfieee128)\ndiff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-swscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-swscanf.c\nindex 7124ecb67c..fdfdf2b65c 100644\n--- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-swscanf.c\n+++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-swscanf.c\n@@ -34,7 +34,7 @@ ___ieee128_swscanf (const wchar_t *string, const wchar_t *format, ...)\n   done = __vfwscanf_internal (fp, format, ap,\n \t\t\t      SCANF_LDBL_USES_FLOAT128);\n   va_end (ap);\n-\n+  _IO_wstrfile_fclose_stack (fp);\n   return done;\n }\n strong_alias (___ieee128_swscanf, __swscanfieee128)\ndiff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vswscanf.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vswscanf.c\nindex 8294582c48..b860a8e87d 100644\n--- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vswscanf.c\n+++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vswscanf.c\n@@ -27,6 +27,8 @@ ___ieee128_vswscanf (const wchar_t *string, const wchar_t *format,\n   _IO_strfile sf;\n   struct _IO_wide_data wd;\n   FILE *fp = _IO_strfile_readw (&sf, &wd, string);\n-  return __vfwscanf_internal (fp, format, ap, SCANF_LDBL_USES_FLOAT128);\n+  int done = __vfwscanf_internal (fp, format, ap, SCANF_LDBL_USES_FLOAT128);\n+  _IO_wstrfile_fclose_stack (fp);\n+  return done;\n }\n strong_alias (___ieee128_vswscanf, __vswscanfieee128)\ndiff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c\nindex dcd5649200..e239cd5bc5 100644\n--- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c\n+++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c\n@@ -391,7 +391,9 @@ __nldbl_vswscanf (const wchar_t *s, const wchar_t *fmt, va_list ap)\n   struct _IO_wide_data wd;\n   FILE *f = _IO_strfile_readw (&sf, &wd, s);\n \n-  return __vfwscanf_internal (f, fmt, ap, SCANF_LDBL_IS_DBL);\n+  int ret = __vfwscanf_internal (f, fmt, ap, SCANF_LDBL_IS_DBL);\n+  _IO_wstrfile_fclose_stack (f);\n+  return ret;\n }\n libc_hidden_def (__nldbl_vswscanf)\n \n@@ -955,7 +957,9 @@ __nldbl___isoc99_vswscanf (const wchar_t *s, const wchar_t *fmt, va_list ap)\n   struct _IO_wide_data wd;\n   FILE *f = _IO_strfile_readw (&sf, &wd, s);\n \n-  return __vfwscanf_internal (f, fmt, ap, SCANF_LDBL_IS_DBL | SCANF_ISOC99_A);\n+  int ret = __vfwscanf_internal (f, fmt, ap, SCANF_LDBL_IS_DBL | SCANF_ISOC99_A);\n+  _IO_wstrfile_fclose_stack (f);\n+  return ret;\n }\n libc_hidden_def (__nldbl___isoc99_vswscanf)\n \n@@ -1115,9 +1119,11 @@ __nldbl___isoc23_vswscanf (const wchar_t *s, const wchar_t *fmt, va_list ap)\n   struct _IO_wide_data wd;\n   FILE *f = _IO_strfile_readw (&sf, &wd, s);\n \n-  return __vfwscanf_internal (f, fmt, ap,\n+  int ret = __vfwscanf_internal (f, fmt, ap,\n \t\t\t      SCANF_LDBL_IS_DBL | SCANF_ISOC99_A\n \t\t\t      | SCANF_ISOC23_BIN_CST);\n+  _IO_wstrfile_fclose_stack (f);\n+  return ret;\n }\n libc_hidden_def (__nldbl___isoc23_vswscanf)\n \ndiff --git a/wcsmbs/isoc23_swscanf.c b/wcsmbs/isoc23_swscanf.c\nindex 66b5290b3c..568ab138b4 100644\n--- a/wcsmbs/isoc23_swscanf.c\n+++ b/wcsmbs/isoc23_swscanf.c\n@@ -33,6 +33,6 @@ __isoc23_swscanf (const wchar_t *s, const wchar_t *format, ...)\n   done = __vfwscanf_internal (f, format, arg,\n \t\t\t      SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST);\n   va_end (arg);\n-\n+  _IO_wstrfile_fclose_stack (f);\n   return done;\n }\ndiff --git a/wcsmbs/isoc23_vswscanf.c b/wcsmbs/isoc23_vswscanf.c\nindex d84efb9350..89b7241a7a 100644\n--- a/wcsmbs/isoc23_vswscanf.c\n+++ b/wcsmbs/isoc23_vswscanf.c\n@@ -24,7 +24,9 @@ __isoc23_vswscanf (const wchar_t *string, const wchar_t *format, va_list args)\n   _IO_strfile sf;\n   struct _IO_wide_data wd;\n   FILE *f = _IO_strfile_readw (&sf, &wd, string);\n-  return __vfwscanf_internal (f, format, args,\n+  int done = __vfwscanf_internal (f, format, args,\n \t\t\t      SCANF_ISOC99_A | SCANF_ISOC23_BIN_CST);\n+  _IO_wstrfile_fclose_stack (f);\n+  return done;\n }\n libc_hidden_def (__isoc23_vswscanf)\ndiff --git a/wcsmbs/isoc99_swscanf.c b/wcsmbs/isoc99_swscanf.c\nindex 493fe01520..c94f19ca41 100644\n--- a/wcsmbs/isoc99_swscanf.c\n+++ b/wcsmbs/isoc99_swscanf.c\n@@ -32,6 +32,6 @@ __isoc99_swscanf (const wchar_t *s, const wchar_t *format, ...)\n   va_start (arg, format);\n   done = __vfwscanf_internal (f, format, arg, SCANF_ISOC99_A);\n   va_end (arg);\n-\n+  _IO_wstrfile_fclose_stack (f);\n   return done;\n }\ndiff --git a/wcsmbs/isoc99_vswscanf.c b/wcsmbs/isoc99_vswscanf.c\nindex 326f7bfd24..6bc134a807 100644\n--- a/wcsmbs/isoc99_vswscanf.c\n+++ b/wcsmbs/isoc99_vswscanf.c\n@@ -33,6 +33,8 @@ __isoc99_vswscanf (const wchar_t *string, const wchar_t *format, va_list args)\n   _IO_strfile sf;\n   struct _IO_wide_data wd;\n   FILE *f = _IO_strfile_readw (&sf, &wd, string);\n-  return __vfwscanf_internal (f, format, args, SCANF_ISOC99_A);\n+  int done = __vfwscanf_internal (f, format, args, SCANF_ISOC99_A);\n+  _IO_wstrfile_fclose_stack (f);\n+  return done;\n }\n libc_hidden_def (__isoc99_vswscanf)\n",
    "prefixes": [
        "1/2"
    ]
}