@@ -184,6 +184,7 @@ php_apache_sapi_read_post(char *buf, size_t count_bytes)
184
184
php_struct * ctx = SG (server_context );
185
185
request_rec * r ;
186
186
apr_bucket_brigade * brigade ;
187
+ apr_status_t ret ;
187
188
188
189
r = ctx -> r ;
189
190
brigade = ctx -> brigade ;
@@ -195,7 +196,7 @@ php_apache_sapi_read_post(char *buf, size_t count_bytes)
195
196
* need to make sure that if data is available we fill the buffer completely.
196
197
*/
197
198
198
- while (ap_get_brigade (r -> input_filters , brigade , AP_MODE_READBYTES , APR_BLOCK_READ , len ) == APR_SUCCESS ) {
199
+ while (( ret = ap_get_brigade (r -> input_filters , brigade , AP_MODE_READBYTES , APR_BLOCK_READ , len ) ) == APR_SUCCESS ) {
199
200
apr_brigade_flatten (brigade , buf , & len );
200
201
apr_brigade_cleanup (brigade );
201
202
tlen += len ;
@@ -206,6 +207,14 @@ php_apache_sapi_read_post(char *buf, size_t count_bytes)
206
207
len = count_bytes - tlen ;
207
208
}
208
209
210
+ if (ret != APR_SUCCESS ) {
211
+ if (APR_STATUS_IS_TIMEUP (ret )) {
212
+ SG (sapi_headers ).http_response_code = ap_map_http_request_error (ret , HTTP_REQUEST_TIME_OUT );
213
+ } else {
214
+ SG (sapi_headers ).http_response_code = ap_map_http_request_error (ret , HTTP_BAD_REQUEST );
215
+ }
216
+ }
217
+
209
218
return tlen ;
210
219
}
211
220
@@ -656,6 +665,13 @@ zend_first_try {
656
665
brigade = ctx -> brigade ;
657
666
}
658
667
668
+ if (SG (request_info ).content_length > SG (read_post_bytes )) {
669
+ ap_log_rerror (APLOG_MARK , APLOG_ERR , 0 , r , "attemp to read POST data error: %d" , SG (sapi_headers ).http_response_code );
670
+ apr_brigade_cleanup (brigade );
671
+ PHPAP_INI_OFF ;
672
+ return SG (sapi_headers ).http_response_code ;
673
+ }
674
+
659
675
if (AP2 (last_modified )) {
660
676
ap_update_mtime (r , r -> finfo .mtime );
661
677
ap_set_last_modified (r );
0 commit comments