Skip to content

Commit 716fa9c

Browse files
committed
Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0: define php_ap_map_http_request_error function for older httpd only add old versions of httpd support typo fixed bug fixed #61471 in apache2handler
2 parents d82bd36 + a8931df commit 716fa9c

File tree

1 file changed

+44
-1
lines changed

1 file changed

+44
-1
lines changed

sapi/apache2handler/sapi_apache2.c

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,33 @@ char *apache2_php_ini_path_override = NULL;
6969
ZEND_TSRMLS_CACHE_DEFINE()
7070
#endif
7171

72+
/* if apache's version is newer than 2.2.31 or 2.4.16 */
73+
#if MODULE_MAGIC_COOKIE == 0x41503232UL && AP_MODULE_MAGIC_AT_LEAST(20051115,40) || \
74+
MODULE_MAGIC_COOKIE == 0x41503234UL && AP_MODULE_MAGIC_AT_LEAST(20120211,47)
75+
#define php_ap_map_http_request_error ap_map_http_request_error
76+
#else
77+
static int php_ap_map_http_request_error(apr_status_t rv, int status)
78+
{
79+
switch (rv) {
80+
case AP_FILTER_ERROR: {
81+
return AP_FILTER_ERROR;
82+
}
83+
case APR_ENOSPC: {
84+
return HTTP_REQUEST_ENTITY_TOO_LARGE;
85+
}
86+
case APR_ENOTIMPL: {
87+
return HTTP_NOT_IMPLEMENTED;
88+
}
89+
case APR_ETIMEDOUT: {
90+
return HTTP_REQUEST_TIME_OUT;
91+
}
92+
default: {
93+
return status;
94+
}
95+
}
96+
}
97+
#endif
98+
7299
static size_t
73100
php_apache_sapi_ub_write(const char *str, size_t str_length)
74101
{
@@ -184,6 +211,7 @@ php_apache_sapi_read_post(char *buf, size_t count_bytes)
184211
php_struct *ctx = SG(server_context);
185212
request_rec *r;
186213
apr_bucket_brigade *brigade;
214+
apr_status_t ret;
187215

188216
r = ctx->r;
189217
brigade = ctx->brigade;
@@ -195,7 +223,7 @@ php_apache_sapi_read_post(char *buf, size_t count_bytes)
195223
* need to make sure that if data is available we fill the buffer completely.
196224
*/
197225

198-
while (ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES, APR_BLOCK_READ, len) == APR_SUCCESS) {
226+
while ((ret=ap_get_brigade(r->input_filters, brigade, AP_MODE_READBYTES, APR_BLOCK_READ, len)) == APR_SUCCESS) {
199227
apr_brigade_flatten(brigade, buf, &len);
200228
apr_brigade_cleanup(brigade);
201229
tlen += len;
@@ -206,6 +234,14 @@ php_apache_sapi_read_post(char *buf, size_t count_bytes)
206234
len = count_bytes - tlen;
207235
}
208236

237+
if (ret != APR_SUCCESS) {
238+
if (APR_STATUS_IS_TIMEUP(ret)) {
239+
SG(sapi_headers).http_response_code = php_ap_map_http_request_error(ret, HTTP_REQUEST_TIME_OUT);
240+
} else {
241+
SG(sapi_headers).http_response_code = php_ap_map_http_request_error(ret, HTTP_BAD_REQUEST);
242+
}
243+
}
244+
209245
return tlen;
210246
}
211247

@@ -690,6 +726,13 @@ zend_first_try {
690726
brigade = ctx->brigade;
691727
}
692728

729+
if (SG(request_info).content_length > SG(read_post_bytes)) {
730+
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Error while attempting to read POST data: %d", SG(sapi_headers).http_response_code);
731+
apr_brigade_cleanup(brigade);
732+
PHPAP_INI_OFF;
733+
return SG(sapi_headers).http_response_code;
734+
}
735+
693736
if (AP2(last_modified)) {
694737
ap_update_mtime(r, r->finfo.mtime);
695738
ap_set_last_modified(r);

0 commit comments

Comments
 (0)