[PATCH] wpa_debug: Remove 2048 byte message length limit

Anders Kaseorg andersk at MIT.EDU
Wed Feb 19 07:09:48 EST 2014


On Wed, 19 Feb 2014, Jouni Malinen wrote:
> How portable is this? SUSv2 seems to imply that n==0 would result in 
> undefined behavior, so this may not work without being compliant with 
> C99. There are some strange targets that wpa_supplicant is used on, so 
> I'm not sure whether there would be enough justification for this change 
> if there is risk of breaking debugging on such platforms.

This was corrected in SUSv3.  According to the Autoconf manual,

https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Function-Portability.html#index-g_t_0040code_007bsnprintf_007d-357

“The C99 standard says that if the output array isn't big enough and if no 
other errors occur, snprintf and vsnprintf truncate the output and return 
the number of bytes that ought to have been produced. Some older systems 
return the truncated length (e.g., GNU C Library 2.0.x or IRIX 6.5), some 
a negative value (e.g., earlier GNU C Library versions), and some the 
buffer length without truncation (e.g., 32-bit Solaris 7). Also, some 
buggy older systems ignore the length and overrun the buffer (e.g., 64-bit 
Solaris 7).”

glibc 2.0.x and Solaris 7 have been obsolete for at least 14 years, and I 
can’t find any evidence of wpa_supplicant being used on IRIX, but you 
would know better than me.  If any of these platforms are a concern, we 
could work around these problems by checking for potential truncation and 
redoubling the buffer length until there’s enough space?  (Except 64-bit 
Solaris 7, which just sounds completely hopeless.)

Keep in mind that snprintf isn’t even part of C89 at all, so we have to 
draw a line somewhere.

Anders


More information about the HostAP mailing list