From: Andrei Zmievski Date: Fri, 9 Jun 2000 03:00:02 +0000 (+0000) Subject: (php_wddx_deserialize_ex) return SUCCESS/FAILURE X-Git-Tag: PRE_EIGHT_BYTE_ALLOC_PATCH~18 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1868bfdcdf053b7cb2859f03521e50734e746ec4;p=php (php_wddx_deserialize_ex) return SUCCESS/FAILURE Use that return value in WDDX session deserializer. --- diff --git a/ext/session/session.c b/ext/session/session.c index 3efca14f1a..cc0096bf42 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -336,42 +336,35 @@ PS_SERIALIZER_DECODE_FUNC(wddx) ulong idx; int hash_type; int dofree = 1; - int ret = SUCCESS; + int ret; if (vallen == 0) return SUCCESS; MAKE_STD_ZVAL(retval); - retval->type = IS_NULL; - - php_wddx_deserialize_ex((char *)val, vallen, retval); - - if (retval->type == IS_NULL) { - ret = FAILURE; - goto cleanup; - } - - for (zend_hash_internal_pointer_reset(retval->value.ht); - zend_hash_get_current_data(retval->value.ht, (void **) &ent) == SUCCESS; - zend_hash_move_forward(retval->value.ht)) { - hash_type = zend_hash_get_current_key(retval->value.ht, &key, &idx); - - switch (hash_type) { - case HASH_KEY_IS_LONG: - sprintf(tmp, "%ld", idx); - key = tmp; - dofree = 0; - /* fallthru */ - case HASH_KEY_IS_STRING: - php_set_session_var(key, strlen(key), *ent PSLS_CC); - PS_ADD_VAR(key); - if (dofree) efree(key); - dofree = 1; + if ((ret = php_wddx_deserialize_ex((char *)val, vallen, retval)) == SUCCESS) { + + for (zend_hash_internal_pointer_reset(retval->value.ht); + zend_hash_get_current_data(retval->value.ht, (void **) &ent) == SUCCESS; + zend_hash_move_forward(retval->value.ht)) { + hash_type = zend_hash_get_current_key(retval->value.ht, &key, &idx); + + switch (hash_type) { + case HASH_KEY_IS_LONG: + sprintf(tmp, "%ld", idx); + key = tmp; + dofree = 0; + /* fallthru */ + case HASH_KEY_IS_STRING: + php_set_session_var(key, strlen(key), *ent PSLS_CC); + PS_ADD_VAR(key); + if (dofree) efree(key); + dofree = 1; + } } } -cleanup: zval_dtor(retval); efree(retval); diff --git a/ext/wddx/php_wddx_api.h b/ext/wddx/php_wddx_api.h index 4c9807d107..73ed4f70b3 100644 --- a/ext/wddx/php_wddx_api.h +++ b/ext/wddx/php_wddx_api.h @@ -60,7 +60,7 @@ void php_wddx_packet_end(wddx_packet *packet); void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name); void php_wddx_add_chunk_ex(wddx_packet *packet, char *str, int length); -void php_wddx_deserialize_ex(char *, int, zval *return_value); +int php_wddx_deserialize_ex(char *, int, zval *return_value); char *php_wddx_gather(wddx_packet *packet); #endif /* PHP_WDDX_API_H */ diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c index 5b40d7773d..bcc07eef11 100644 --- a/ext/wddx/wddx.c +++ b/ext/wddx/wddx.c @@ -744,12 +744,13 @@ static void php_wddx_process_data(void *user_data, const char *s, int len) /* }}} */ -/* {{{ void php_wddx_deserialize_ex(char *value, int vallen, zval *return_value) */ -void php_wddx_deserialize_ex(char *value, int vallen, zval *return_value) +/* {{{ int php_wddx_deserialize_ex(char *value, int vallen, zval *return_value) */ +int php_wddx_deserialize_ex(char *value, int vallen, zval *return_value) { wddx_stack stack; XML_Parser parser; st_entry *ent; + int retval; wddx_stack_init(&stack); parser = XML_ParserCreate("ISO-8859-1"); @@ -766,9 +767,13 @@ void php_wddx_deserialize_ex(char *value, int vallen, zval *return_value) wddx_stack_top(&stack, (void**)&ent); *return_value = *(ent->data); zval_copy_ctor(return_value); - } + retval = SUCCESS; + } else + retval = FAILURE; wddx_stack_destroy(&stack); + + return retval; } /* }}} */