https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=272914
Bug ID: 272914
Summary: wcscmp is not ISO C compliant
Product: Base System
Version: 13.2-RELEASE
Hardware: Any
OS: Any
Status: New
Severity: Affects Some People
Priority: ---
Component: standards
Assignee: [email protected]
Reporter: [email protected]
ISO C 23 § 7.31.4.4.1 together with § 7.31.4.4.(1) and § 7.31.1.(6) specifies
that wcscmp must compare the string elements as wchar_t values, and that all
wchar_t values can legitimately occur.
On FreeBSD/x86_64, wchar_t is signed, i.e. equivalent to 'int'. In the test
case below, cmp must therefore come out positive, since a[0] > 0 > b[0]. But
wcscmp in FreeBSD compares the wchar_t values as if they were unsigned.
How to reproduce:
================================= foo.c =============================
#include <wchar.h>
int main ()
{
/* This test fails on glibc < 2.15, musl libc 1.2.3, macOS 12.5,
FreeBSD 13.2, NetBSD 9.0, OpenBSD 7.2, Solaris 11.4. */
wchar_t a[2] = { (wchar_t) 0x76547654, 0 };
wchar_t b[2] = { (wchar_t) 0x9abc9abc, 0 };
int cmp = wcscmp (a, b);
return (!((wchar_t)-1 < 0 ? cmp > 0 : cmp < 0));
}
=====================================================================
$ cc foo.c
$ ./a.out
$ echo $?
1
--
You are receiving this mail because:
You are the assignee for the bug.
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.