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
| @@ -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 { | 
