https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83688
Bug ID: 83688 Summary: Please check if buffers may overlap when copying strings Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: bugzi...@poradnik-webmastera.com Target Milestone: --- Functions like strcpy internally use memcpy to copy data. This may cause problems when someone will try to use them to move string in buffer, e.g. to strip prefix. gcc is able to detect if overlapping buffers are used with memcpy. Please add similar diagnostics to strcpy/sprintf functions too. [code] #include <string.h> #include <stdio.h> char buf[20]; void test() { strcpy(buf, buf+5); memcpy(buf, buf+5, strlen(buf+5)+1); snprintf(buf, sizeof(buf), "%s", buf+5); memcpy(buf, buf+5, 10); } [/code] [out] $ g++ -c -o test.o test.cc -O3 -Wall -Wextra -Wformat-overflow -Wformat-truncation -Wstringop-overflow=2 -Wstringop-truncation test.cc: In function ‘void test()’: test.cc:13:11: warning: ‘void* memcpy(void*, const void*, size_t)’ accessing 10 bytes at offsets 0 and 5 overlaps 5 bytes at offset 5 [-Wrestrict] memcpy(buf, buf+5, 10); ~~~~~~^~~~~~~~~~~~~~~~ $ g++ --version g++ (GCC) 8.0.0 20171231 (experimental) [/out]