Index: modsecurity-v2.9.8/apache2/apache2_io.c
===================================================================
--- modsecurity-v2.9.8.orig/apache2/apache2_io.c
+++ modsecurity-v2.9.8/apache2/apache2_io.c
@@ -222,6 +222,10 @@ apr_status_t read_request_body(modsec_re
              *      too large and APR_EGENERAL when the client disconnects.
              */
             switch(rc) {
+                case AP_FILTER_ERROR :
+                    *error_msg = apr_pstrdup(msr->mp, "Error reading request body: filter error");
+                    return -8;
+
                 case APR_INCOMPLETE :
                     *error_msg = apr_psprintf(msr->mp, "Error reading request body: %s", get_apr_error(msr->mp, rc));
                     return -7;
@@ -231,7 +235,7 @@ apr_status_t read_request_body(modsec_re
                 case APR_TIMEUP :
                     *error_msg = apr_psprintf(msr->mp, "Error reading request body: %s", get_apr_error(msr->mp, rc));
                     return -4;
-                case AP_FILTER_ERROR :
+                case APR_ENOSPC:
                     *error_msg = apr_psprintf(msr->mp, "Error reading request body: HTTP Error 413 - Request entity too large. (Most likely.)");
                     return -3;
                 case APR_EGENERAL :
Index: modsecurity-v2.9.8/apache2/mod_security2.c
===================================================================
--- modsecurity-v2.9.8.orig/apache2/mod_security2.c
+++ modsecurity-v2.9.8/apache2/mod_security2.c
@@ -1032,7 +1032,7 @@ static int hook_request_late(request_rec
     }
 
     rc = read_request_body(msr, &my_error_msg);
-    if (rc < 0 && msr->txcfg->is_enabled == MODSEC_ENABLED) {
+    if (rc < 0) {
         switch(rc) {
             case -1 :
                 if (my_error_msg != NULL) {
@@ -1040,6 +1040,21 @@ static int hook_request_late(request_rec
                 }
                 return HTTP_INTERNAL_SERVER_ERROR;
                 break;
+            case -2 : /* Bad request. */
+            case -6 : /* EOF when reading request body. */
+            case -7 : /* Partial recieved */
+                if (my_error_msg != NULL) {
+                    msr_log(msr, 4, "%s", my_error_msg);
+                }
+                r->connection->keepalive = AP_CONN_CLOSE;
+                return HTTP_BAD_REQUEST;
+                break;
+            case -3 : /* Apache's LimitRequestBody. */
+                if (my_error_msg != NULL) {
+                    msr_log(msr, 1, "%s", my_error_msg);
+                }
+                return HTTP_REQUEST_ENTITY_TOO_LARGE;
+                break;
             case -4 : /* Timeout. */
                 if (my_error_msg != NULL) {
                     msr_log(msr, 4, "%s", my_error_msg);
@@ -1061,19 +1076,11 @@ static int hook_request_late(request_rec
                     }
                 }
                 break;
-            case -6 : /* EOF when reading request body. */
-                if (my_error_msg != NULL) {
-                    msr_log(msr, 4, "%s", my_error_msg);
-                }
-                r->connection->keepalive = AP_CONN_CLOSE;
-                return HTTP_BAD_REQUEST;
-                break;
-            case -7 : /* Partial recieved */
+            case -8 : /* Filter error. */
                 if (my_error_msg != NULL) {
-                    msr_log(msr, 4, "%s", my_error_msg);
+                    msr_log(msr, 1, "%s", my_error_msg);
                 }
-                r->connection->keepalive = AP_CONN_CLOSE;
-                return HTTP_BAD_REQUEST;
+                return AP_FILTER_ERROR;
                 break;
             default :
                 /* allow through */
