Comment by AdieuToLogic
2 days ago
The example strdup implementation:
char *strdup(const char *str) {
size_t len = strlen(str);
char *retval = malloc(len);
if (!retval) {
return NULL;
}
strcpy(retval, str);
return retval;
}
Has a very common defect. The malloc call does not reserve enough space for the NUL byte required for successful use of strcpy, thus introducing heap corruption.
Also, assuming a NULL pointer is bitwise equal to 0 is not portable.
Aargh. You're totally right about the off by one error. Thanks for catching it.
I don't believe you're right about the comparison to zero, however, as the comment below indicates.
re: the bitwise representation of NULL, evaluating a pointer in a Boolean context has the intended behavior regardless of the internal representation of a null pointer.
See the C FAQ questions 5-3 and 5-10, et al. https://c-faq.com/null/