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