andrei Wed Apr 25 13:14:29 2001 EDT Modified files: /php4/ext/standard html.c html.h /php4/ext/wddx php_wddx_api.h wddx.c Log: * Made ENT_* defines availabe to other functions. * The key/variable names in WDDX are now html escaped to not break XML. @- Fixed WDDX serialization to HTML-escape key/variable names so as not to @ break the XML packet. (Andrei) Index: php4/ext/standard/html.c diff -u php4/ext/standard/html.c:1.24 php4/ext/standard/html.c:1.25 --- php4/ext/standard/html.c:1.24 Thu Mar 1 16:15:49 2001 +++ php4/ext/standard/html.c Wed Apr 25 13:14:27 2001 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: html.c,v 1.24 2001/03/02 00:15:49 sniper Exp $ */ +/* $Id: html.c,v 1.25 2001/04/25 20:14:27 andrei Exp $ */ #include "php.h" #include "reg.h" @@ -44,10 +44,6 @@ "ouml","divide","oslash","ugrave","uacute","ucirc", "uuml","yacute","thorn","yuml" }; - -#define ENT_COMPAT 1 -#define ENT_QUOTES 2 -#define ENT_NOQUOTES 4 PHPAPI char *php_escape_html_entities(unsigned char *old, int oldlen, int *newlen, int all, int quote_style) { Index: php4/ext/standard/html.h diff -u php4/ext/standard/html.h:1.8 php4/ext/standard/html.h:1.9 --- php4/ext/standard/html.h:1.8 Sun Feb 25 22:07:17 2001 +++ php4/ext/standard/html.h Wed Apr 25 13:14:27 2001 @@ -16,10 +16,14 @@ +----------------------------------------------------------------------+ */ -/* $Id: html.h,v 1.8 2001/02/26 06:07:17 andi Exp $ */ +/* $Id: html.h,v 1.9 2001/04/25 20:14:27 andrei Exp $ */ #ifndef HTML_H #define HTML_H + +#define ENT_COMPAT 1 +#define ENT_QUOTES 2 +#define ENT_NOQUOTES 4 void register_html_constants(INIT_FUNC_ARGS); Index: php4/ext/wddx/php_wddx_api.h diff -u php4/ext/wddx/php_wddx_api.h:1.13 php4/ext/wddx/php_wddx_api.h:1.14 --- php4/ext/wddx/php_wddx_api.h:1.13 Sun Feb 25 22:07:25 2001 +++ php4/ext/wddx/php_wddx_api.h Wed Apr 25 13:14:29 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_wddx_api.h,v 1.13 2001/02/26 06:07:25 andi Exp $ */ +/* $Id: php_wddx_api.h,v 1.14 2001/04/25 20:14:29 andrei Exp $ */ #ifndef PHP_WDDX_API_H #define PHP_WDDX_API_H @@ -59,7 +59,7 @@ void php_wddx_packet_start(wddx_packet *packet, char *comment, int comment_len); void php_wddx_packet_end(wddx_packet *packet); -void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name); +void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name, +int name_len); int php_wddx_deserialize_ex(char *, int, zval *return_value); #define php_wddx_gather(packet) estrndup(packet->c, packet->len) Index: php4/ext/wddx/wddx.c diff -u php4/ext/wddx/wddx.c:1.62 php4/ext/wddx/wddx.c:1.63 --- php4/ext/wddx/wddx.c:1.62 Mon Feb 5 19:57:43 2001 +++ php4/ext/wddx/wddx.c Wed Apr 25 13:14:29 2001 @@ -27,7 +27,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: wddx.c,v 1.62 2001/02/06 03:57:43 andrei Exp $ */ +/* $Id: wddx.c,v 1.63 2001/04/25 20:14:29 andrei Exp $ */ #include "php.h" #include "php_wddx.h" @@ -41,6 +41,7 @@ #include "ext/standard/base64.h" #include "ext/standard/info.h" #include "ext/standard/php_smart_str.h" +#include "ext/standard/html.h" #define WDDX_BUF_LEN 256 #define PHP_CLASS_NAME_VAR "php_class_name" @@ -368,13 +369,15 @@ } if (zend_hash_find(HASH_OF(obj), Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)+1, (void **)&ent) == SUCCESS) { - php_wddx_serialize_var(packet, *ent, Z_STRVAL_PP(varname)); + php_wddx_serialize_var(packet, *ent, +Z_STRVAL_PP(varname), Z_STRLEN_PP(varname)); } } php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); } } else { + ulong key_len; + PHP_CLASS_ATTRIBUTES; PHP_SET_CLASS_ATTRIBUTES(obj); @@ -395,11 +398,11 @@ if (*ent == obj) continue; - if (zend_hash_get_current_key(HASH_OF(obj), &key, &idx, 0) == HASH_KEY_IS_STRING) { - php_wddx_serialize_var(packet, *ent, key); + if (zend_hash_get_current_key_ex(HASH_OF(obj), &key, &key_len, +&idx, 0, NULL) == HASH_KEY_IS_STRING) { + php_wddx_serialize_var(packet, *ent, key, key_len); } else { - sprintf(tmp_buf, "%ld", idx); - php_wddx_serialize_var(packet, *ent, tmp_buf); + key_len = sprintf(tmp_buf, "%ld", idx); + php_wddx_serialize_var(packet, *ent, tmp_buf, key_len); } } php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); @@ -416,6 +419,7 @@ { zval **ent; char *key; + ulong key_len; int is_struct = 0, ent_type; ulong idx; HashTable *target_hash; @@ -442,7 +446,7 @@ } ind++; - } + } if (is_struct) { php_wddx_add_chunk_static(packet, WDDX_STRUCT_S); @@ -458,16 +462,16 @@ continue; if (is_struct) { - ent_type = zend_hash_get_current_key(target_hash, &key, &idx, 0); + ent_type = zend_hash_get_current_key_ex(target_hash, &key, +&key_len, &idx, 0, NULL); if (ent_type == HASH_KEY_IS_STRING) { - php_wddx_serialize_var(packet, *ent, key); + php_wddx_serialize_var(packet, *ent, key, key_len); } else { - sprintf(tmp_buf, "%ld", idx); - php_wddx_serialize_var(packet, *ent, tmp_buf); + key_len = sprintf(tmp_buf, "%ld", idx); + php_wddx_serialize_var(packet, *ent, tmp_buf, key_len); } } else - php_wddx_serialize_var(packet, *ent, NULL); + php_wddx_serialize_var(packet, *ent, NULL, 0); } if (is_struct) { @@ -478,13 +482,17 @@ } -void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name) +void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name, int name_len) { char tmp_buf[WDDX_BUF_LEN]; - + char *name_esc; + int name_esc_len; + if (name) { - sprintf(tmp_buf, WDDX_VAR_S, name); + name_esc = php_escape_html_entities(name, name_len, &name_esc_len, 0, +ENT_QUOTES); + sprintf(tmp_buf, WDDX_VAR_S, name_esc); php_wddx_add_chunk(packet, tmp_buf); + efree(name_esc); } switch(Z_TYPE_P(var)) { @@ -530,7 +538,7 @@ { if (zend_hash_find(EG(active_symbol_table), Z_STRVAL_P(name_var), Z_STRLEN_P(name_var)+1, (void**)&val) != FAILURE) { - php_wddx_serialize_var(packet, *val, Z_STRVAL_P(name_var)); + php_wddx_serialize_var(packet, *val, Z_STRVAL_P(name_var), +Z_STRLEN_P(name_var)); } } else if (Z_TYPE_P(name_var) == IS_ARRAY || Z_TYPE_P(name_var) == IS_OBJECT) @@ -887,7 +895,7 @@ else php_wddx_packet_start(packet, NULL, 0); - php_wddx_serialize_var(packet, (*var), NULL); + php_wddx_serialize_var(packet, (*var), NULL, 0); php_wddx_packet_end(packet); ZVAL_STRINGL(return_value, packet->c, packet->len, 1); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]