Avoid creating out-of-bounds pointer when checking for seprintf truncation

It is technically undefined behavior (see C11 6.5.6p8) to construct
a pointer more than one past the end of an array. To prevent this,
compare n with the remaining space in the array before adding to
ptr.
weechat-hashes
Michael Forney 2021-06-09 14:34:57 -07:00 committed by C. McEnroe
parent dfc3ac95c1
commit 0a1cfca0f4
1 changed files with 2 additions and 2 deletions

4
chat.h
View File

@ -52,8 +52,8 @@ static inline char *seprintf(char *ptr, char *end, const char *fmt, ...) {
int n = vsnprintf(ptr, end - ptr, fmt, ap); int n = vsnprintf(ptr, end - ptr, fmt, ap);
va_end(ap); va_end(ap);
if (n < 0) return NULL; if (n < 0) return NULL;
ptr += n; if (n > end - ptr) return end;
return (ptr > end ? end : ptr); return ptr + n;
} }
enum Attr { enum Attr {