]> granicus.if.org Git - php/commitdiff
(PHP wddx_deserialize) Fixed a problem with deserializing empty values.
authorAndrei Zmievski <andrei@php.net>
Wed, 2 Feb 2000 21:53:27 +0000 (21:53 +0000)
committerAndrei Zmievski <andrei@php.net>
Wed, 2 Feb 2000 21:53:27 +0000 (21:53 +0000)
(php_addslashes) Guard against NULL data.

ext/standard/string.c
ext/wddx/wddx.c

index 8ebb5444d19ae33bb0eb6cccc62487b751d0edb0..2eba932e0694c1e1e82240f06a8e6241e5041fda 100644 (file)
@@ -1636,12 +1636,17 @@ PHPAPI char *php_addcslashes(char *str, int length, int *new_length, int should_
 PHPAPI char *php_addslashes(char *str, int length, int *new_length, int should_free)
 {
        /* maximum string length, worst case situation */
-       char *new_str = (char *) emalloc((length?length:(length=strlen(str)))*2+1);
+       char *new_str;
        char *source,*target;
        char *end;
        char c;
        PLS_FETCH();
-
+       
+       if (!str) {
+               *new_length = 0;
+               return str;
+       }
+       new_str = (char *) emalloc((length?length:(length=strlen(str)))*2+1);
        for (source=str,end=source+length,target=new_str; (c = *source) || source<end; source++) {
                switch(c) {
                        case '\0':
index 261ed3fce43a717aaa6271c2bdaeda17f5a3ec12..fadad176ecdce87b7ecd428c04169f1ba6c6a5bd 100644 (file)
@@ -509,9 +509,10 @@ static void php_wddx_push_element(void *user_data, const char *name, const char
                SET_STACK_VARNAME;
                
                ALLOC_ZVAL(ent.data);
-               ent.data->value.str.val = NULL;
-               ent.data->value.str.len = 0;
                INIT_PZVAL(ent.data);
+               ent.data->type = IS_STRING;
+               ent.data->value.str.val = empty_string;
+               ent.data->value.str.len = 0;
                wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
        } else if (!strcmp(name, EL_CHAR)) {
                int i;
@@ -529,6 +530,7 @@ static void php_wddx_push_element(void *user_data, const char *name, const char
                
                ALLOC_ZVAL(ent.data);
                INIT_PZVAL(ent.data);
+               ent.data->type = IS_LONG;
                wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
        } else if (!strcmp(name, EL_BOOLEAN)) {
                int i;
@@ -540,6 +542,7 @@ static void php_wddx_push_element(void *user_data, const char *name, const char
 
                                ALLOC_ZVAL(ent.data);
                                INIT_PZVAL(ent.data);
+                               ent.data->type = IS_BOOL;
                                wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry));
                                php_wddx_process_data(user_data, atts[i+1], strlen(atts[i+1]));
                        }
@@ -667,7 +670,6 @@ static void php_wddx_process_data(void *user_data, const char *s, int len)
                wddx_stack_top(stack, (void**)&ent);
                switch (ent->type) {
                        case ST_STRING:
-                               ent->data->type = IS_STRING;
                                if (ent->data->value.str.len == 0) {
                                        ent->data->value.str.val = estrndup(s, len);
                                        ent->data->value.str.len = len;
@@ -688,7 +690,6 @@ static void php_wddx_process_data(void *user_data, const char *s, int len)
                                break;
 
                        case ST_BOOLEAN:
-                               ent->data->type = IS_BOOL;
                                if (!strcmp(s, "true"))
                                        ent->data->value.lval = 1;
                                else if (!strcmp(s, "false"))