diff options
author | Michael Forney | 2021-06-09 14:34:57 -0700 |
---|---|---|
committer | C. McEnroe | 2021-06-09 17:54:26 -0400 |
commit | 0a1cfca0f41ca4ee5d981253b8f151c67aacf4f6 (patch) | |
tree | a3876a6d59daf3d0ad25832c79b9645d5fc88aa7 | |
parent | dfc3ac95c1a59a9a593bd9ec08dbc99e03d4b7d2 (diff) |
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.
-rw-r--r-- | chat.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/chat.h b/chat.h index e75112a..327262b 100644 --- a/chat.h +++ b/chat.h @@ -52,8 +52,8 @@ static inline char *seprintf(char *ptr, char *end, const char *fmt, ...) { int n = vsnprintf(ptr, end - ptr, fmt, ap); va_end(ap); if (n < 0) return NULL; - ptr += n; - return (ptr > end ? end : ptr); + if (n > end - ptr) return end; + return ptr + n; } enum Attr { |