diff
- while (i < sizeof(buf) && (pg - page < len) &&
-     *pg != '\0' && *pg != '\n')
-     buf[i++] = *pg++;
+ size_t remaining = bufsize - 1;
+ while ((pg - page < len) && *pg != '\0' && *pg != '\n' && remaining > 0) {
+     buf[i++] = *pg++;
+     remaining--;
+ }
+ buf[i] = '\0';
