Thread (13 messages) 13 messages, 6 authors, 2023-06-13

Re: [PATCH v3 2/4] vsscanf(): Integer overflow is a conversion failure

From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Date: 2023-06-12 11:05:42
Also in: linux-staging, lkml, xen-devel

On 10/06/2023 22.40, Demi Marie Obenour wrote:
sscanf() and friends currently ignore integer overflow, but this is a
bad idea.  It is much better to detect integer overflow errors and
consider this a conversion failure.
Perhaps. And maybe I even agree. But not like this:
quoted hunk ↗ jump to hunk
 	while (*fmt) {
 		/* skip any white space in format */
@@ -3464,6 +3474,9 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
 			break;
 		++fmt;
 
+		allow_overflow = *fmt == '!';
+		fmt += (int)allow_overflow;
+
You can't do that. Or, at least, you won't be able to actually use %!d
anywhere, because the compiler will yell at you:

lib/vsprintf.c: In function ‘foobar’:
lib/vsprintf.c:3727:26: error: unknown conversion type character ‘!’ in
format [-Werror=format=]
 3727 |  ret = sscanf("12345", "%!d", &val);
      |                          ^

So NAK.

Also, when you make significant changes to the sscanf implementation,
I'd expect the diffstat for the patch series to contain lib/test_scanf.c.

Rasmus
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help