Skip to content

Commit bafb0b4

Browse files
committed
We need to pass PHP-managed pointers to filter here to avoid having
emalloc'ed data assigned to things like r->uri and having it get efree()'ed on request shutdown which then means that if the Apache logging module tries to log r->uri it would be reading from free'ed memory. So a simple estrdup before the filter call takes care of that.
1 parent e345eb5 commit bafb0b4

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

sapi/apache/mod_php5.c

+6-7
Original file line numberDiff line numberDiff line change
@@ -243,14 +243,12 @@ static void sapi_apache_register_server_variables(zval *track_vars_array TSRMLS_
243243
table_entry *elts = (table_entry *) arr->elts;
244244
zval **path_translated;
245245
HashTable *symbol_table;
246-
int new_val_len;
246+
int val_len, new_val_len;
247+
char *val;
247248

248249
for (i = 0; i < arr->nelts; i++) {
249-
char *val;
250-
int val_len;
251-
252250
if (elts[i].val) {
253-
val = elts[i].val;
251+
val = estrdup(elts[i].val);
254252
} else {
255253
val = "";
256254
}
@@ -275,8 +273,9 @@ static void sapi_apache_register_server_variables(zval *track_vars_array TSRMLS_
275273
php_register_variable("PATH_TRANSLATED", Z_STRVAL_PP(path_translated), track_vars_array TSRMLS_CC);
276274
}
277275

278-
if (sapi_module.input_filter(PARSE_SERVER, "PHP_SELF", &((request_rec *) SG(server_context))->uri, strlen(((request_rec *) SG(server_context))->uri), &new_val_len TSRMLS_CC)) {
279-
php_register_variable("PHP_SELF", ((request_rec *) SG(server_context))->uri, track_vars_array TSRMLS_CC);
276+
val = estrdup(((request_rec *)SG(server_context))->uri);
277+
if (sapi_module.input_filter(PARSE_SERVER, "PHP_SELF", val, strlen(val), &new_val_len TSRMLS_CC)) {
278+
php_register_variable_safe("PHP_SELF", val, new_val_len, track_vars_array TSRMLS_CC);
280279
}
281280
}
282281
/* }}} */

0 commit comments

Comments
 (0)