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).
(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)
. 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)
} \
}
-/* {{{ 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;
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;
}
/* }}} */
+#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)
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;
}
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;
#else
if (php_check_open_basedir(file TSRMLS_CC)) {
#endif
+ FILEINFO_DESTROY_OBJECT(object);
RETURN_FALSE;
}
}
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);
- }
+ }
}
/* }}} */
--- /dev/null
+--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