util: fix gcc vsnprintf overflow
authorMichel Zou <xantares09@hotmail.com>
Thu, 18 Feb 2021 16:20:22 +0000 (17:20 +0100)
committerMarge Bot <eric+marge@anholt.net>
Fri, 19 Feb 2021 11:05:38 +0000 (11:05 +0000)
Anything higher than INT_MAX results in overflow although the parameter is declared as size_t.

Worse, with (size_t)-1 it is silently ignored and Woverflow is not emitted.

Closes #4226

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Tested-by: Prodea Alexandru-Liviu <liviuprodea@yahoo.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9134>

src/util/u_string.h

index 88df2cc..4700d9c 100644 (file)
@@ -42,6 +42,7 @@
 #include <stddef.h>
 #include <stdarg.h>
 #include <string.h>
+#include <limits.h>
 
 #include "util/macros.h" // PRINTFLIKE
 
@@ -72,7 +73,7 @@ util_sprintf(char *str, const char *format, ...)
 {
    va_list ap;
    va_start(ap, format);
-   vsnprintf(str, (size_t)-1, format, ap);
+   vsnprintf(str, INT_MAX, format, ap);
    va_end(ap);
 }