about summary refs log tree commit diff
path: root/src/stdio
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2024-01-17 18:11:58 -0500
committerRich Felker <dalias@aerifal.cx>2024-01-17 18:11:58 -0500
commit11fb383275d20f5f94c00425bd888a02ecbd218e (patch)
treeea8d30a17772dfcb3a2e689c93071cf2579630ea /src/stdio
parentf47a5d400b8ffa26cfc5b345dbff52fec94ac7f3 (diff)
downloadmusl-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/stdio')
-rw-r--r--src/stdio/vsnprintf.c5
-rw-r--r--src/stdio/vswprintf.c3
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);