mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
- Fixed bug #61173 (Unable to detect error from finfo constructor).
- Tidied up NEWS
This commit is contained in:
parent
31a100dccd
commit
48666d9ffc
46
NEWS
46
NEWS
@ -1,22 +1,16 @@
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
?? ??? 2012, PHP 5.3.11
|
||||
|
||||
- Core:
|
||||
. Improved max_input_vars directive to check nested variables (Dmitry).
|
||||
. Fixed bug #61095 (Incorect lexing of 0x00*+<NUM>). (Etienne)
|
||||
|
||||
- Session:
|
||||
. Fixed bug #60860 (session.save_handler=user without defined function core
|
||||
dumps). (Felipe)
|
||||
|
||||
- Tidy:
|
||||
. Fixed bug #54682 (tidy null pointer dereference). (Tony, David Soria Parra)
|
||||
|
||||
- Core:
|
||||
. Fixed bug #61072 (Memory leak when restoring an exception handler).
|
||||
(Nikic, Laruence)
|
||||
. Fixed bug #61000 (Exceeding max nesting level doesn't delete numerical vars).
|
||||
(Laruence)
|
||||
. Fixed bug #61058 (array_fill leaks if start index is PHP_INT_MAX).
|
||||
(Laruence)
|
||||
. Fixed bug #61000 (Exceeding max nesting level doesn't delete numerical
|
||||
vars). (Laruence)
|
||||
. Fix bug #60895 (Possible invalid handler usage in windows random
|
||||
functions). (Pierre)
|
||||
. Fixed bug #60825 (Segfault when running symfony 2 tests).
|
||||
@ -25,18 +19,12 @@ PHP NEWS
|
||||
(rui, Gustavo)
|
||||
. Fixed bug #51860 (Include fails with toplevel symlink to /). (Dmitry)
|
||||
|
||||
- Fileinfo
|
||||
. Fixed bug #61173 (Unable to detect error from finfo constructor). (Gustavo)
|
||||
|
||||
- Firebird Database extension (ibase):
|
||||
. Fixed bug #60802 (ibase_trans() gives segfault when passing params).
|
||||
|
||||
- Streams:
|
||||
. Fixed bug #61115 (stream related segfault on fatal error in
|
||||
php_stream_context_link). (Gustavo)
|
||||
. Further fix for bug #60455 (stream_get_line misbehaves if EOF is not detected
|
||||
together with the last read). (Gustavo)
|
||||
. Fixed bug #60817 (stream_get_line() reads from stream even when there is
|
||||
already sufficient data buffered). stream_get_line() now behaves more like
|
||||
fgets(), as is documented. (Gustavo)
|
||||
|
||||
- PHP-FPM SAPI:
|
||||
. Fixed bug #60811 (php-fpm compilation problem). (rasmus)
|
||||
|
||||
@ -53,9 +41,21 @@ PHP NEWS
|
||||
. Fixed bug #60968 (Late static binding doesn't work with
|
||||
ReflectionMethod::invokeArgs()). (Laruence)
|
||||
|
||||
- Array:
|
||||
. Fixed bug #61058 (array_fill leaks if start index is PHP_INT_MAX).
|
||||
(Laruence)
|
||||
- Session:
|
||||
. Fixed bug #60860 (session.save_handler=user without defined function core
|
||||
dumps). (Felipe)
|
||||
|
||||
- Streams:
|
||||
. Fixed bug #61115 (stream related segfault on fatal error in
|
||||
php_stream_context_link). (Gustavo)
|
||||
. Further fix for bug #60455 (stream_get_line misbehaves if EOF is not
|
||||
detected together with the last read). (Gustavo)
|
||||
. Fixed bug #60817 (stream_get_line() reads from stream even when there is
|
||||
already sufficient data buffered). stream_get_line() now behaves more like
|
||||
fgets(), as is documented. (Gustavo)
|
||||
|
||||
- Tidy:
|
||||
. Fixed bug #54682 (tidy null pointer dereference). (Tony, David Soria Parra)
|
||||
|
||||
- XMLRPC:
|
||||
. Fixed bug #61097 (Memory leak in xmlrpc functions copying zvals). (Nikic)
|
||||
|
@ -76,9 +76,9 @@ struct finfo_object {
|
||||
} \
|
||||
}
|
||||
|
||||
/* {{{ finfo_objects_dtor
|
||||
/* {{{ finfo_objects_free
|
||||
*/
|
||||
static void finfo_objects_dtor(void *object, zend_object_handle handle TSRMLS_DC)
|
||||
static void finfo_objects_free(void *object TSRMLS_DC)
|
||||
{
|
||||
struct finfo_object *intern = (struct finfo_object *) object;
|
||||
|
||||
@ -108,7 +108,8 @@ PHP_FILEINFO_API zend_object_value finfo_objects_new(zend_class_entry *class_typ
|
||||
|
||||
intern->ptr = NULL;
|
||||
|
||||
retval.handle = zend_objects_store_put(intern, finfo_objects_dtor, NULL, NULL TSRMLS_CC);
|
||||
retval.handle = zend_objects_store_put(intern, NULL,
|
||||
finfo_objects_free, NULL TSRMLS_CC);
|
||||
retval.handlers = (zend_object_handlers *) &finfo_object_handlers;
|
||||
|
||||
return retval;
|
||||
@ -276,6 +277,15 @@ PHP_MINFO_FUNCTION(fileinfo)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
#define FILEINFO_DESTROY_OBJECT(object) \
|
||||
do { \
|
||||
if (object) { \
|
||||
zend_object_store_ctor_failed(object TSRMLS_CC); \
|
||||
zval_dtor(object); \
|
||||
ZVAL_NULL(object); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* {{{ proto resource finfo_open([int options [, string arg]])
|
||||
Create a new fileinfo resource. */
|
||||
PHP_FUNCTION(finfo_open)
|
||||
@ -288,6 +298,7 @@ PHP_FUNCTION(finfo_open)
|
||||
char resolved_path[MAXPATHLEN];
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &options, &file, &file_len) == FAILURE) {
|
||||
FILEINFO_DESTROY_OBJECT(object);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
@ -305,9 +316,11 @@ PHP_FUNCTION(finfo_open)
|
||||
file = NULL;
|
||||
} else if (file && *file) { /* user specified file, perform open_basedir checks */
|
||||
if (strlen(file) != file_len) {
|
||||
FILEINFO_DESTROY_OBJECT(object);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
if (!VCWD_REALPATH(file, resolved_path)) {
|
||||
FILEINFO_DESTROY_OBJECT(object);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
file = resolved_path;
|
||||
@ -317,6 +330,7 @@ PHP_FUNCTION(finfo_open)
|
||||
#else
|
||||
if (php_check_open_basedir(file TSRMLS_CC)) {
|
||||
#endif
|
||||
FILEINFO_DESTROY_OBJECT(object);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
@ -329,21 +343,23 @@ PHP_FUNCTION(finfo_open)
|
||||
if (finfo->magic == NULL) {
|
||||
efree(finfo);
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid mode '%ld'.", options);
|
||||
RETURN_FALSE;
|
||||
FILEINFO_DESTROY_OBJECT(object);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (magic_load(finfo->magic, file) == -1) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to load magic database at '%s'.", file);
|
||||
magic_close(finfo->magic);
|
||||
efree(finfo);
|
||||
FILEINFO_DESTROY_OBJECT(object);
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (object) {
|
||||
FILEINFO_REGISTER_OBJECT(object, finfo);
|
||||
} else {
|
||||
ZEND_REGISTER_RESOURCE(return_value, finfo, le_fileinfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
14
ext/fileinfo/tests/bug61173.phpt
Normal file
14
ext/fileinfo/tests/bug61173.phpt
Normal file
@ -0,0 +1,14 @@
|
||||
--TEST--
|
||||
Bug #61173: Unable to detect error from finfo constructor
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!class_exists('finfo'))
|
||||
die('skip no fileinfo extension');
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$finfo = new finfo(1, '', false);
|
||||
var_dump($finfo);
|
||||
--EXPECTF--
|
||||
Warning: finfo::finfo() expects at most 2 parameters, 3 given in %s on line %d
|
||||
NULL
|
Loading…
Reference in New Issue
Block a user