On Tuesday 2009-07-14 11:50 +1000, matthew green output: : - newlen = off + len + 1; : /* Ensure that the resultant buffer length fits in ssize_t */ : - if (newlen > (size_t)SSIZE_MAX + 1) { : + if (off + len + 1 > (unsigned int)SSIZE_MAX) {
:unsigned int will truncate this on 64 bit platforms, won't it? :can't the cast just be removed? I guess so. I don't remember how the compiler chooses the comparison for this. "off", "len" and "SSIZE_MAX" are all ``ssize_t''. I would have thought you needed to expand one of them at least (even if, as you say, ``unsigned int'' is the wrong choice here) to get a correct comparison generated but I guess my C skills are a bit rusty. Regards, Geoff