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]