> > > In the manpage you could succinctly state: > > > > In malloc(3): > > “If you use smaller integer types than size_t for ‘nmemb’ and ‘size’, > then
> multiplication in freezero() may need to be cast to size_t to avoid > integer overflow: > > freezero(ptr, (size_t)nmemb * (size_t)size);” > > Or maybe even: freezero(ptr, (size_t)nmemb * size); > > That is incorrect. If it’s functionally incorrect, then tell me how the following cast acts equivalently to intermediate storage or at least calls operations which act upon uint64_t and makes the function return what is obviously intended on your OpenBSD: uint64_t bufferToTime(const u_char buf[]) { return (( (( (( (( (( (( (( (uint64_t) buf[7]) << 8) | buf[6]) << 8) | buf[5]) << 8) | buf[4]) << 8) | buf[3]) << 8) | buf[2]) << 8) | buf[1]) << 8) | buf[0]; } Because it works. -- -Luke