From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2 autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 20998 invoked from network); 22 Mar 2023 16:25:06 -0000 Received: from second.openwall.net (193.110.157.125) by inbox.vuxu.org with ESMTPUTF8; 22 Mar 2023 16:25:06 -0000 Received: (qmail 16139 invoked by uid 550); 22 Mar 2023 16:25:02 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 16104 invoked from network); 22 Mar 2023 16:25:01 -0000 ARC-Seal: i=1; a=rsa-sha256; t=1679502289; cv=none; d=strato.com; s=strato-dkim-0002; b=Y7XhYVhyHBE+QDQ4UQPv4t4vvCHxY2XUKy1IQn+bB2mDWhkmlSr+JIlEkjaPgXabQ/ 8oleCs6FknPkq6Fu4NdVSN2WHmYvm7M+0RthxTj06ikBEtIxMROCKC+PAxo55/MS3t9z moGB+q81hOymkbnUi6BBP8WzogOSQALWhL5ebiyoOrTc+Y+9lm9g3gS62TpZM+nB6aPI vT43XAL9NnYVJYFxG712wnt0/3lXc7gP4dbwJwN+qQEcV7Qj1clbGdBq6J092dK+M9YI DoWyoFC5QzyepwQFFA+6BuY28bPCyVR/NW4Zpx0NWl/HByIkJF3fSWYtVOqXyuOYvY1j zTDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1679502289; s=strato-dkim-0002; d=strato.com; h=Message-ID:Date:Subject:To:From:Cc:Date:From:Subject:Sender; bh=IxWGgKZ9dc2513hrRFo1jeB78cWSO78d3P8NvmS4N5c=; b=IwSBPjNOIvCFKVnbJlXjS707CMUqWnuGYpNFIj7L8FcGTugrHjMAHVTFZO7O0D9rnz 9FfZz/F4FIIOg1t2kCd/hRNGlOt/McSGf2tj05EuT2toblPhBHkmnGvfQRMMJq6+IBFP CbUTOch94154QdZT/pxN93n708zWjBD2ttjKMJ2CEvwr8tmiIG2eWDO/MV8gi/0TmqEs VlljquJ6N0nNFpEFQGatCN7s14vKlxjxJWGVtZKMe7HYzpAYLCiLLkBI1/VObJg8+oGr PEgwjroMk/rDUJW0dvsP/74xxpkStGNl6J9hCfbYIp8+07KzI27KBt2u1FqGV6/p1Kq4 FxAg== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1679502289; s=strato-dkim-0002; d=clisp.org; h=Message-ID:Date:Subject:To:From:Cc:Date:From:Subject:Sender; bh=IxWGgKZ9dc2513hrRFo1jeB78cWSO78d3P8NvmS4N5c=; b=hDtV3kOkkEO8v1BvQlOlaadQYwdMBFLdZjtcLEPUhndOKUw+DPRRc8MsMWjIMjHDut b6fXi07ohRw89hL/Rtvlhz6ihL4CEG3UZxYEVAEYJ1HJaW6DyLFnINdbas8o4ygylAWg 1WohrLBi+RQXhqr34eiKklb8nMZb6iQbDJFpUL2eZbC7DAMTwxo89gfDVwpapFopERnr h6IEZzOOFdSaAVWr5SGsl6ekVCbzolpwpN2CV52JQ9lyi9xh/eD+0PqHMEn7CWA/vwKg UgXUk4HpIJzc1nGG7IuNFfY8fZi1u1KJ+CRMmPlhsWuyEmn1FIXGLgK07PCYNFHCAaPi 70sA== X-RZG-AUTH: ":Ln4Re0+Ic/6oZXR1YgKryK8brlshOcZlIWs+iCP5vnk6shHyDnj3JyzywjmTEY3F" From: Bruno Haible To: musl@lists.openwall.com Date: Wed, 22 Mar 2023 17:24:18 +0100 Message-ID: <15375070.O9o76ZdvQC@nimes> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Subject: [musl] swprintf produces garbage after a null wide character When swprintf is meant to produce output with a null wide character, in musl libc 1.2.3, it produces a correct return value, but fills the entire destination buffer with null wide characters. I.e. in this case, the number of written wide characters is larger than the return value + 1. How to reproduce: ==================================== foo.c ==================================== #include #include int main () { { wchar_t buf[5] = { 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF }; int ret = swprintf (buf, 4, L"%c", '\0'); printf ("ret = %d, buf[0] = 0x%x, buf[1] = 0x%x, buf[2] = 0x%x, buf[3] = 0x%x, buf[4] = 0x%x\n", ret, (unsigned int) buf[0], (unsigned int) buf[1], (unsigned int) buf[2], (unsigned int) buf[3], (unsigned int) buf[4]); } { wchar_t buf[5] = { 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF }; int ret = swprintf (buf, 4, L"%cz", '\0'); printf ("ret = %d, buf[0] = 0x%x, buf[1] = 0x%x, buf[2] = 0x%x, buf[3] = 0x%x, buf[4] = 0x%x\n", ret, (unsigned int) buf[0], (unsigned int) buf[1], (unsigned int) buf[2], (unsigned int) buf[3], (unsigned int) buf[4]); } return 0; } /* glibc, Solaris 11, Cygwin: ret = 1, buf[0] = 0x0, buf[1] = 0x0, buf[2] = 0xbeef, buf[3] = 0xbeef, buf[4] = 0xbeef ret = 2, buf[0] = 0x0, buf[1] = 0x7a, buf[2] = 0x0, buf[3] = 0xbeef, buf[4] = 0xbeef musl libc: ret = 1, buf[0] = 0x0, buf[1] = 0x0, buf[2] = 0x0, buf[3] = 0x0, buf[4] = 0xbeef ret = 2, buf[0] = 0x0, buf[1] = 0x0, buf[2] = 0x0, buf[3] = 0x0, buf[4] = 0xbeef FreeBSD 13, NetBSD 9, OpenBSD 7.2, macOS 12.5, AIX 7.1: ret = 1, buf[0] = 0x0, buf[1] = 0xbeef, buf[2] = 0xbeef, buf[3] = 0xbeef, buf[4] = 0xbeef ret = 2, buf[0] = 0x0, buf[1] = 0xbeef, buf[2] = 0xbeef, buf[3] = 0xbeef, buf[4] = 0xbeef */ =============================================================================== $ gcc -Wall foo.c $ ./a.out Expected output: ret = 1, buf[0] = 0x0, buf[1] = 0x0, buf[2] = 0xbeef, buf[3] = 0xbeef, buf[4] = 0xbeef ret = 2, buf[0] = 0x0, buf[1] = 0x7a, buf[2] = 0x0, buf[3] = 0xbeef, buf[4] = 0xbeef Actual output: ret = 1, buf[0] = 0x0, buf[1] = 0x0, buf[2] = 0x0, buf[3] = 0x0, buf[4] = 0xbeef ret = 2, buf[0] = 0x0, buf[1] = 0x0, buf[2] = 0x0, buf[3] = 0x0, buf[4] = 0xbeef Bruno