diff options
author | Rich Felker <dalias@aerifal.cx> | 2024-01-17 18:11:58 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2024-01-17 18:11:58 -0500 |
commit | 11fb383275d20f5f94c00425bd888a02ecbd218e (patch) | |
tree | ea8d30a17772dfcb3a2e689c93071cf2579630ea /src | |
parent | f47a5d400b8ffa26cfc5b345dbff52fec94ac7f3 (diff) | |
download | musl-11fb383275d20f5f94c00425bd888a02ecbd218e.tar.gz musl-11fb383275d20f5f94c00425bd888a02ecbd218e.tar.xz musl-11fb383275d20f5f94c00425bd888a02ecbd218e.zip |
remove INT_MAX limit on the n argument to snprintf/swprintf
this was a POSIX requirement that was always in conflict with ISO C, which specified a well-defined behavior for snprintf and swprintf so long as the actual number of bytes/characters produced did not exceed INT_MAX. I originally raised this conflict for snprintf with the Austin Group as tracker issue 761, which was never resolved. it was later reported again as issue 1219, and as a result the conflicting requirement has been removed. the corresponding issue with swprintf does not seem to have been addressed, but as the same reasoning applies to it, I am removing the limitation on n for swprintf as well.
Diffstat (limited to 'src')
-rw-r--r-- | src/stdio/vsnprintf.c | 5 | ||||
-rw-r--r-- | src/stdio/vswprintf.c | 3 |
2 files changed, 0 insertions, 8 deletions
diff --git a/src/stdio/vsnprintf.c b/src/stdio/vsnprintf.c index b3510a63..409b9c85 100644 --- a/src/stdio/vsnprintf.c +++ b/src/stdio/vsnprintf.c @@ -45,11 +45,6 @@ int vsnprintf(char *restrict s, size_t n, const char *restrict fmt, va_list ap) .cookie = &c, }; - if (n > INT_MAX) { - errno = EOVERFLOW; - return -1; - } - *c.s = 0; return vfprintf(&f, fmt, ap); } diff --git a/src/stdio/vswprintf.c b/src/stdio/vswprintf.c index fc223cf2..5e9a4dad 100644 --- a/src/stdio/vswprintf.c +++ b/src/stdio/vswprintf.c @@ -51,9 +51,6 @@ int vswprintf(wchar_t *restrict s, size_t n, const wchar_t *restrict fmt, va_lis if (!n) { return -1; - } else if (n > INT_MAX) { - errno = EOVERFLOW; - return -1; } r = vfwprintf(&f, fmt, ap); sw_write(&f, 0, 0); |