17bfed
diff --git a/include/http_protocol.h b/include/http_protocol.h
17bfed
index e1572dc..8ed77ac 100644
17bfed
--- a/include/http_protocol.h
17bfed
+++ b/include/http_protocol.h
17bfed
@@ -439,7 +439,27 @@ AP_DECLARE(int) ap_rwrite(const void *buf, int nbyte, request_rec *r);
17bfed
  */
17bfed
 static APR_INLINE int ap_rputs(const char *str, request_rec *r)
17bfed
 {
17bfed
-    return ap_rwrite(str, (int)strlen(str), r);
17bfed
+    apr_size_t len;
17bfed
+
17bfed
+    len = strlen(str);
17bfed
+
17bfed
+    for (;;) {
17bfed
+        if (len <= INT_MAX) {
17bfed
+            return ap_rwrite(str, (int)len, r);
17bfed
+        }
17bfed
+        else {
17bfed
+            int rc;
17bfed
+
17bfed
+            rc = ap_rwrite(str, INT_MAX, r);
17bfed
+            if (rc < 0) {
17bfed
+                return rc;
17bfed
+            }
17bfed
+            else {
17bfed
+                str += INT_MAX;
17bfed
+                len -= INT_MAX;
17bfed
+            }
17bfed
+        }
17bfed
+    }
17bfed
 }
17bfed
 
17bfed
 /**
17bfed
diff --git a/server/protocol.c b/server/protocol.c
17bfed
index a554970..ea461a2 100644
17bfed
--- a/server/protocol.c
17bfed
+++ b/server/protocol.c
17bfed
@@ -2107,6 +2107,9 @@ AP_DECLARE(int) ap_rputc(int c, request_rec *r)
17bfed
 
17bfed
 AP_DECLARE(int) ap_rwrite(const void *buf, int nbyte, request_rec *r)
17bfed
 {
17bfed
+    if (nbyte < 0)
17bfed
+        return -1;
17bfed
+
17bfed
     if (r->connection->aborted)
17bfed
         return -1;
17bfed