Merge pull request #980 from ManoharPaturi/fix-printbuf-memset-nul

printbuf_memset: maintain the NUL-termination invariant
This commit is contained in:
Eric Hawicz authored and GitHub committed 2026-09-29 19:31:39 -04:00
commit b469bea36e
1 file changed
+6 -2
+6 -2
View File
@@ -136,9 +136,12 @@ int printbuf_memset(struct printbuf *pb, int offset, int charvalue, int len)
return -1; return -1;
} }
size_needed = offset + len; size_needed = offset + len;
if (pb->size < size_needed) /* + 1 keeps the printbuf invariant that buf[bpos] is '\0' after every
* operation; without it, reading pb->buf as a C string right after an
* indent() consumes uninitialized bytes. */
if (pb->size < size_needed + 1)
{ {
if (printbuf_extend(pb, size_needed) < 0) if (printbuf_extend(pb, size_needed + 1) < 0)
return -1; return -1;
} }
@@ -147,6 +150,7 @@ int printbuf_memset(struct printbuf *pb, int offset, int charvalue, int len)
memset(pb->buf + offset, charvalue, len); memset(pb->buf + offset, charvalue, len);
if (pb->bpos < size_needed) if (pb->bpos < size_needed)
pb->bpos = size_needed; pb->bpos = size_needed;
pb->buf[pb->bpos] = '\0';
return 0; return 0;
} }