install location). (james dot cohen at digitalwindow dot com, Greg)
- Fixed bug #48733 (CURLOPT_WRITEHEADER|CURLOPT_FILE|CURLOPT_STDERR warns on
files that have been opened with r+). (Ilia)
+- Fixed bug #48719 (parse_ini_*(): scanner_mode parameter is not checked for
+ sanity). (Jani)
- Fixed bug #48718 (FILTER_VALIDATE_EMAIL does not allow numbers in domain
components). (Ilia)
- Fixed bug #48681 (openssl signature verification for tar archives broken).
/* {{{ init_ini_scanner()
*/
-static void init_ini_scanner(TSRMLS_D)
+static int init_ini_scanner(int scanner_mode, zend_file_handle *fh TSRMLS_DC)
{
+ /* Sanity check */
+ if (scanner_mode != ZEND_INI_SCANNER_NORMAL && scanner_mode != ZEND_INI_SCANNER_RAW) {
+ zend_error(E_WARNING, "Invalid scanner mode");
+ return FAILURE;
+ }
+
SCNG(lineno) = 1;
- SCNG(scanner_mode) = ZEND_INI_SCANNER_NORMAL;
+ SCNG(scanner_mode) = scanner_mode;
+ SCNG(yy_in) = fh;
+
+ if (fh != NULL) {
+ ini_filename = zend_strndup(fh->filename, strlen(fh->filename));
+ } else {
+ ini_filename = NULL;
+ }
+
zend_stack_init(&SCNG(state_stack));
BEGIN(INITIAL);
+
+ return SUCCESS;
}
/* }}} */
char *buf;
size_t size;
- if (zend_stream_fixup(fh, &buf, &size TSRMLS_CC) == FAILURE) {
+ if (zend_stream_fixup(fh, &buf, &size TSRMLS_CC) == FAILURE ||
+ init_ini_scanner(scanner_mode, fh TSRMLS_CC) == FAILURE
+ ) {
return FAILURE;
}
- init_ini_scanner(TSRMLS_C);
- SCNG(scanner_mode) = scanner_mode;
- SCNG(yy_in) = fh;
yy_scan_buffer(buf, size TSRMLS_CC);
- ini_filename = zend_strndup(fh->filename, strlen(fh->filename));
+
return SUCCESS;
}
/* }}} */
{
int len = strlen(str);
- init_ini_scanner(TSRMLS_C);
- SCNG(scanner_mode) = scanner_mode;
- SCNG(yy_in) = NULL;
+ if (init_ini_scanner(scanner_mode, NULL TSRMLS_CC) == FAILURE) {
+ return FAILURE;
+ }
+
yy_scan_buffer(str, len TSRMLS_CC);
- ini_filename = NULL;
+
return SUCCESS;
}
/* }}} */