]> granicus.if.org Git - php/commitdiff
- Fixed a memleak (Original patch by Hannes Magnusson).
authorDerick Rethans <derick@php.net>
Tue, 8 Jul 2008 19:29:06 +0000 (19:29 +0000)
committerDerick Rethans <derick@php.net>
Tue, 8 Jul 2008 19:29:06 +0000 (19:29 +0000)
ext/date/php_date.c

index 935514e3816ee3d2c2aef93f3b4f2049ee021e3c..3cf90db20283ed6c0c66a6c9ff9b1bfd87805573 100644 (file)
@@ -3317,11 +3317,13 @@ zval *date_interval_read_property(zval *object, zval *member, int type TSRMLS_DC
        GET_VALUE_FROM_STRUCT(invert, "invert");
        GET_VALUE_FROM_STRUCT(days, "days");
 
+       ALLOC_INIT_ZVAL(retval);
+       Z_SET_REFCOUNT_P(retval, 0);
+
        if (value == -1) {
                php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unknown property (%s)", Z_STRVAL_P(member));
        }
 
-       ALLOC_INIT_ZVAL(retval);
        ZVAL_LONG(retval, value);
 
        if (member == &tmp_member) {
@@ -3337,6 +3339,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value TSRMLS
 {
        php_interval_obj *obj;
        zval tmp_member, tmp_value;
+       int found = 0;
 
        if (member->type != IS_STRING) {
                tmp_member = *member;
@@ -3354,6 +3357,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value TSRMLS
                        convert_to_long(&tmp_value);      \
                        value = &tmp_value;               \
                }                                     \
+               found = 1;                            \
                obj->diff->n = Z_LVAL_P(value); \
                if (value == &tmp_value) {         \
                        zval_dtor(value);              \
@@ -3368,7 +3372,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value TSRMLS
        SET_VALUE_FROM_STRUCT(s, "s");
        SET_VALUE_FROM_STRUCT(invert, "invert");
 
-       if (value == -1) {
+       if (!found) {
                php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unknown property (%s)", Z_STRVAL_P(member));
        }