Comment by AdieuToLogic
1 day 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.
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/