On Mon, Jul 8, 2024 at 4:48 PM david kerns <david.t.ke...@gmail.com> wrote:
> I'd argue for a global replacement of sprintf(dest, ...) to snprintf(dest, > sizeof(dest)...) > Unfortunately, that's probably not an automated task. > from the man page: > The snprintf() and vsnprintf() functions will write at most size-1 of > the characters printed > into the output string (the size'th character then gets the > terminating ‘\0’); if the return > value is greater than or equal to the size argument, the string was > too short and some of the > printed characters were discarded. The output is always > null-terminated, unless size is 0. > > bonus points for checking the return code :) > > Nice task. Wanna implement it? :) On Mon, Jul 8, 2024 at 3:55 PM Vincent Lefevre <vinc...@vinc17.net> wrote: > Compiling master with GCC gives: > > screen.c: In function ‘main’: > screen.c:794:56: warning: ‘sprintf’ may write a terminating nul past the > end of the destination [-Wformat-overflow=] > 794 | sprintf(SocketPath, "%s/.screen", home); > | ^ > screen.c:794:25: note: ‘sprintf’ output between 9 and 4097 bytes into a > destination of size 4096 > 794 | sprintf(SocketPath, "%s/.screen", home); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > Indeed, the test strlen(home) > MAXPATHLEN - 8 is not sufficient > due to the terminating null character (if home has length > MAXPATHLEN - 8, then MAXPATHLEN + 1 characters are written, > which is larger than the buffer size MAXPATHLEN). > > The attached patch fixes this problem and makes the warning disappear. > > -- > Thanks. It's in master now.