2 ms·
Let's consider this function: char* strappend(char const* input, size_t size) { char* ptr = malloc(size + 2); if (!ptr) return 0; memcpy(ptr, inp
by mgaunard 2y ago
Let's consider this function:
char* strappend(char const* input, size_t size) {
char* ptr = malloc(size + 2);
if (!ptr) return 0;
memcpy(ptr, input, size);
ptr[size] = 'a';
ptr[size + 1] = 'b';
return ptr;
}
This function is undefined if size is SIZE_T_MAX.
Many pieces of code have these sorts of "bugs", but in practice no one cares, because the input required, while theoretically possible, physically is not.
- tmyklebu 2y agoIt does something unexpected if size is SIZE_T_MAX-1, too. And it's also undefined if input is null and size is zero, which seems more likely to surprise that function's author. This is because memcpy requires valid pointer arguments even if the size is zero. In particular, this usage invokes UB: const char *input = ""; size_t len = strlen(input); char *buf = malloc(len); // may return null if len is zero if (len) memcpy(buf, input, len); char \*buf2 = strappend(buf, len); (Edited for formatting.)