From: Andrei Zmievski Date: Wed, 2 Feb 2000 21:53:27 +0000 (+0000) Subject: (PHP wddx_deserialize) Fixed a problem with deserializing empty values. X-Git-Tag: BEFORE_SAPIFICATION_FEB_10_2000~99 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1a4e39838f9b8648bfc4296faa07b3a2a5bacf11;p=php (PHP wddx_deserialize) Fixed a problem with deserializing empty values. (php_addslashes) Guard against NULL data. --- diff --git a/ext/standard/string.c b/ext/standard/string.c index 8ebb5444d1..2eba932e06 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -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) || sourcevalue.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"))