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