Changeset 358

Show
Ignore:
Timestamp:
07/14/09 15:09:00 (1 year ago)
Author:
bart
Message:

Fix a heap corruption bug

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • eaccelerator/trunk/ea_restore.c

    r357 r358  
    128128void fixup_zval(char *base, zval * zv TSRMLS_DC) 
    129129{ 
    130     switch (Z_TYPE_P(zv) & ~IS_CONSTANT_INDEX) { 
     130    switch (EA_ZV_TYPE_P(zv)) { 
    131131        case IS_CONSTANT:           /* fallthrough */ 
    132132        case IS_OBJECT:             /* fallthrough: object are serialized */ 
     
    352352void restore_zval(zval * zv TSRMLS_DC) 
    353353{ 
    354     switch (zv->type & ~IS_CONSTANT_INDEX) { 
     354    switch (EA_ZV_TYPE_P(zv)) { 
    355355    case IS_CONSTANT: 
    356356    case IS_OBJECT: 
     
    730730    restore_zval_hash(&to->constants_table, &from->constants_table); 
    731731    to->constants_table.pDestructor = ZVAL_PTR_DTOR; 
     732     
     733    /* restore properties */ 
     734    restore_hash(&to->properties_info, &from->properties_info, (restore_bucket_t) restore_property_info TSRMLS_CC); 
     735    to->properties_info.pDestructor = properties_info_dtor; 
     736 
    732737    /* restore default properties */ 
    733738    restore_zval_hash(&to->default_properties, &from->default_properties); 
    734739    to->default_properties.pDestructor = ZVAL_PTR_DTOR; 
    735     /* restore properties */ 
    736     restore_hash(&to->properties_info, &from->properties_info, (restore_bucket_t) restore_property_info TSRMLS_CC); 
    737     to->properties_info.pDestructor = properties_info_dtor; 
    738740 
    739741    /* restore default_static_members */ 
  • eaccelerator/trunk/ea_store.c

    r356 r358  
    125125    size_t size = 0; 
    126126 
    127     switch (Z_TYPE_P(zv) & ~IS_CONSTANT_INDEX) { 
     127    switch (EA_ZV_TYPE_P(zv)) { 
    128128        case IS_CONSTANT: 
    129129        case IS_OBJECT: /* object should have been serialized before storing them */ 
     
    453453void store_zval(char **at, zval *zv TSRMLS_DC) 
    454454{ 
    455     switch (Z_TYPE_P(zv) & ~IS_CONSTANT_INDEX) { 
     455    switch (EA_ZV_TYPE_P(zv)) { 
    456456        case IS_CONSTANT: 
    457457        case IS_OBJECT: /* object should have been serialized before storing them */ 
  • eaccelerator/trunk/eaccelerator.h

    r356 r358  
    196196/******************************************************************************/ 
    197197 
     198/* get the type of the zvalue */ 
     199#ifdef ZEND_ENGINE_2_3 
     200#   define EA_ZV_TYPE_P(zv) (Z_TYPE_P(zv) & IS_CONSTANT_TYPE_MASK) 
     201#else 
     202#   define EA_ZV_TYPE_P(zv) (Z_TYPE_P(zv) & ~IS_CONSTANT_INDEX) 
     203#endif 
     204 
    198205 
    199206#ifndef offsetof