which is also UB.
However, no warning gets triggered despite all major warnings enabled, sanitizers don't detect anything and valgrind says everything is OK.
I have even read the assembly to check if the compiler did something during optimization but that is not the case and acc to the asm, this should be doing out of bounds access.
Is my analysis of this being OOB wrong or is this just not detectable with the current tools?
#include <stdio.h>
char* fun() { return "abcdef"; }
int main(void){
printf("%s", fun() + printf("I love coding"));
}
printf returns the total number of characters written. For printf("I love coding"), that should be 13. The code is basically doing printf("abcdef" + 13), which is out of bounds.
Also, shouldn't fun return const char *?
printf doesn't always return the amount of characters printed. In case of an error it would return a negative value. The analysis you ask for requires the compiler to fully understand a function that is usually provided by a system library without direct link to source code.
Обсуждают сегодня