summaryrefslogtreecommitdiff
path: root/include/stdio.h
diff options
context:
space:
mode:
authorSertonix2026-04-15 16:41:46 +0200
committerJulien Voisin2026-04-20 23:15:31 +0200
commit5ac7e1b695281ebdcfe365176d40053764d44684 (patch)
tree4a3419f75c2bf012f5d6abbd0ee35a5a5dbe46fe /include/stdio.h
parent57e658873fe794a654cc773b521dd8fdf3ddd9ed (diff)
Avoid overflow warnings in {v,}sprintfHEADmaster
gcc does not seem to reliably notice that the if condition makes overflows impossible in the code. To please the compiler we can use the __bos flag to return 0 (instead of -1) when the size is unknown. Fixes https://github.com/jvoisin/fortify-headers/issues/62 Fixes https://github.com/jvoisin/fortify-headers/issues/68 Fixes https://github.com/jvoisin/fortify-headers/issues/80
Diffstat (limited to '')
-rw-r--r--include/stdio.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/include/stdio.h b/include/stdio.h
index 2d1ee33..7a8ef05 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -95,10 +95,10 @@ __fortify_access(read_only, 2)
95_FORTIFY_FN(vsprintf) int vsprintf(char * _FORTIFY_POS0 __s, const char *__f, 95_FORTIFY_FN(vsprintf) int vsprintf(char * _FORTIFY_POS0 __s, const char *__f,
96 __builtin_va_list __v) 96 __builtin_va_list __v)
97{ 97{
98 size_t __b = __bos(__s, 0); 98 size_t __b = __bos(__s, 2);
99 int __r; 99 int __r;
100 100
101 if (__b != (size_t)-1) { 101 if (__b) {
102 __r = __orig_vsnprintf(__s, __b, __f, __v); 102 __r = __orig_vsnprintf(__s, __b, __f, __v);
103 if (__r != -1 && (size_t)__r >= __b) 103 if (__r != -1 && (size_t)__r >= __b)
104 __builtin_trap(); 104 __builtin_trap();
@@ -136,10 +136,10 @@ _FORTIFY_FN(snprintf) int snprintf(char *__s, size_t __n,
136__fortify__format(printf, 2, 3) 136__fortify__format(printf, 2, 3)
137_FORTIFY_FN(sprintf) int sprintf(char *__s, const char *__f, ...) 137_FORTIFY_FN(sprintf) int sprintf(char *__s, const char *__f, ...)
138{ 138{
139 size_t __b = __bos(__s, 0); 139 size_t __b = __bos(__s, 2);
140 int __r; 140 int __r;
141 141
142 if (__b != (size_t)-1) { 142 if (__b) {
143 __r = __orig_snprintf(__s, __b, __f, __builtin_va_arg_pack()); 143 __r = __orig_snprintf(__s, __b, __f, __builtin_va_arg_pack());
144 if (__r != -1 && (size_t)__r >= __b) 144 if (__r != -1 && (size_t)__r >= __b)
145 __builtin_trap(); 145 __builtin_trap();