diff --git a/ext/standard/head.c b/ext/standard/head.c index ccef4be16bdfd..13e79804135a7 100644 --- a/ext/standard/head.c +++ b/ext/standard/head.c @@ -294,14 +294,15 @@ PHP_FUNCTION(setrawcookie) /* {{{ Returns true if headers have already been sent, false otherwise */ PHP_FUNCTION(headers_sent) { - zval *arg1 = NULL, *arg2 = NULL; - const char *file=""; - int line=0; + zval *by_ref_filename = NULL; + zval *by_ref_line = NULL; + const char *file = ""; + int line = 0; ZEND_PARSE_PARAMETERS_START(0, 2) Z_PARAM_OPTIONAL - Z_PARAM_ZVAL(arg1) - Z_PARAM_ZVAL(arg2) + Z_PARAM_ZVAL(by_ref_filename) + Z_PARAM_ZVAL(by_ref_line) ZEND_PARSE_PARAMETERS_END(); if (SG(headers_sent)) { @@ -309,24 +310,18 @@ PHP_FUNCTION(headers_sent) file = php_output_get_start_filename(); } - switch(ZEND_NUM_ARGS()) { - case 2: - ZEND_TRY_ASSIGN_REF_LONG(arg2, line); - ZEND_FALLTHROUGH; - case 1: + if (by_ref_filename) { if (file) { - ZEND_TRY_ASSIGN_REF_STRING(arg1, file); + ZEND_TRY_ASSIGN_REF_STRING(by_ref_filename, file); } else { - ZEND_TRY_ASSIGN_REF_EMPTY_STRING(arg1); + ZEND_TRY_ASSIGN_REF_EMPTY_STRING(by_ref_filename); } - break; } - - if (SG(headers_sent)) { - RETURN_TRUE; - } else { - RETURN_FALSE; + if (by_ref_line) { + ZEND_TRY_ASSIGN_REF_LONG(by_ref_line, line); } + + RETURN_BOOL(SG(headers_sent)); } /* }}} */ diff --git a/ext/standard/tests/general_functions/headers_sent_by_ref_args.phpt b/ext/standard/tests/general_functions/headers_sent_by_ref_args.phpt new file mode 100644 index 0000000000000..c59b7acd00136 --- /dev/null +++ b/ext/standard/tests/general_functions/headers_sent_by_ref_args.phpt @@ -0,0 +1,110 @@ +--TEST-- +headers_sent() by-ref argument with named arguments +--FILE-- + +--EXPECTF-- +headers_sent(): +bool(false) +headers_list(): +array(0) { +} +$file: +NULL +$line: +int(0) +headers_sent(): +bool(false) +headers_list(): +array(0) { +} +$file: +string(0) "" +$line: +NULL +header(): +NULL +headers_sent(): +bool(true) +headers_list(): +array(0) { +} +$file: +NULL +$line: +int(36) +headers_sent(): +bool(true) +headers_list(): +array(0) { +} +$file: +string(%d) "%s" +$line: +NULL +Done