summaryrefslogtreecommitdiff
path: root/ext/wddx
diff options
context:
space:
mode:
authorMark Karpeles <magicaltux@php.net>2008-11-20 15:55:00 +0000
committerMark Karpeles <magicaltux@php.net>2008-11-20 15:55:00 +0000
commit75b07963e3ff7578bb20564ec9a2094ebb0c3493 (patch)
treea65143f5ee8a810a3a517117ce0a8bf5173521ca /ext/wddx
parent8258b703c5b5245e75280e7242ba43448294763e (diff)
downloadphp-git-75b07963e3ff7578bb20564ec9a2094ebb0c3493.tar.gz
- MFH: ext/wddx: classes providing __sleep() are stored without properties (fixed)
- ext/wddx: fixed wddx_add_vars() ignoring first var in php 5.3
Diffstat (limited to 'ext/wddx')
-rw-r--r--ext/wddx/tests/002.phpt21
-rw-r--r--ext/wddx/tests/003.phpt26
-rw-r--r--ext/wddx/tests/004.phpt63
-rw-r--r--ext/wddx/tests/005.phpt74
-rw-r--r--ext/wddx/wddx.c16
5 files changed, 193 insertions, 7 deletions
diff --git a/ext/wddx/tests/002.phpt b/ext/wddx/tests/002.phpt
new file mode 100644
index 0000000000..692bfa85c6
--- /dev/null
+++ b/ext/wddx/tests/002.phpt
@@ -0,0 +1,21 @@
+--TEST--
+wddx packet construction using wddx ressource
+--SKIPIF--
+<?php if (!extension_loaded("wddx")) print "skip"; ?>
+--INI--
+precision=14
+--FILE--
+<?php
+ $pkt = wddx_packet_start('TEST comment');
+
+ $var1 = NULL;
+ $var2 = 'some string';
+ $var3 = 756;
+ $var4 = true;
+
+ // add vars to packet
+ wddx_add_vars($pkt, 'var1', 'var2', array('var3', 'var4'));
+ echo wddx_packet_end($pkt);
+?>
+--EXPECT--
+<wddxPacket version='1.0'><header><comment>TEST comment</comment></header><data><struct><var name='var1'><null/></var><var name='var2'><string>some string</string></var><var name='var3'><number>756</number></var><var name='var4'><boolean value='true'/></var></struct></data></wddxPacket>
diff --git a/ext/wddx/tests/003.phpt b/ext/wddx/tests/003.phpt
new file mode 100644
index 0000000000..3240e43e92
--- /dev/null
+++ b/ext/wddx/tests/003.phpt
@@ -0,0 +1,26 @@
+--TEST--
+wddx deserialize from ressource
+--SKIPIF--
+<?php if (!extension_loaded("wddx")) print "skip"; ?>
+--INI--
+precision=14
+--FILE--
+<?php
+ $path = dirname(__FILE__);
+ $fp = fopen("php://temp", 'w+');
+ fputs($fp, "<wddxPacket version='1.0'><header><comment>TEST comment</comment></header><data><struct><var name='var1'><null/></var><var name='var2'><string>some string</string></var><var name='var3'><number>756</number></var><var name='var4'><boolean value='true'/></var></struct></data></wddxPacket>");
+ rewind($fp);
+ var_dump(wddx_deserialize($fp));
+ fclose($fp);
+?>
+--EXPECT--
+array(4) {
+ ["var1"]=>
+ NULL
+ ["var2"]=>
+ string(11) "some string"
+ ["var3"]=>
+ int(756)
+ ["var4"]=>
+ bool(true)
+}
diff --git a/ext/wddx/tests/004.phpt b/ext/wddx/tests/004.phpt
new file mode 100644
index 0000000000..ae5a6b4bd5
--- /dev/null
+++ b/ext/wddx/tests/004.phpt
@@ -0,0 +1,63 @@
+--TEST--
+wddx session serializer handler (serialize)
+--SKIPIF--
+<?php
+ if (!extension_loaded("wddx")) die("skip Wddx module not loaded");
+ if (!extension_loaded('session')) die('skip Session module not enabled');
+
+ // following test code stolen from ext/session/skipif.inc
+ $save_path = ini_get("session.save_path");
+ if ($save_path) {
+ if (!file_exists($save_path)) {
+ die("skip Session save_path doesn't exist");
+ }
+
+ if ($save_path && !@is_writable($save_path)) {
+ if (($p = strpos($save_path, ';')) !== false) {
+ $save_path = substr($save_path, ++$p);
+ }
+ if (!@is_writable($save_path)) {
+ die("skip\n");
+ }
+ }
+ }
+?>
+--INI--
+precision=14
+session.serialize_handler=wddx
+session.use_cookies=0
+session.cache_limiter=
+session.save_handler=files
+--FILE--
+<?php
+ class foo {
+ public $bar = "ok";
+ public $invisible = 'you don\'t see me!';
+
+ function method() { $this->yes = "done"; }
+
+ public function __sleep() { return array('bar', 'yes'); }
+ }
+
+ session_start();
+
+ $_SESSION['data'] = array(
+ 'test1' => true,
+ 'test2' => 'some string',
+ 'test3' => 654321,
+ 'test4' => array(
+ 'some string',
+ true,
+ null
+ ),
+ );
+
+ $_SESSION['class'] = new foo();
+ $_SESSION['class']->method();
+
+ var_dump(session_encode());
+
+ session_destroy();
+?>
+--EXPECT--
+string(550) "<wddxPacket version='1.0'><header/><data><struct><var name='data'><struct><var name='test1'><boolean value='true'/></var><var name='test2'><string>some string</string></var><var name='test3'><number>654321</number></var><var name='test4'><array length='3'><string>some string</string><boolean value='true'/><null/></array></var></struct></var><var name='class'><struct><var name='php_class_name'><string>foo</string></var><var name='bar'><string>ok</string></var><var name='yes'><string>done</string></var></struct></var></struct></data></wddxPacket>"
diff --git a/ext/wddx/tests/005.phpt b/ext/wddx/tests/005.phpt
new file mode 100644
index 0000000000..99e7a9e31f
--- /dev/null
+++ b/ext/wddx/tests/005.phpt
@@ -0,0 +1,74 @@
+--TEST--
+wddx session serializer handler (deserialize)
+--SKIPIF--
+<?php
+ if (!extension_loaded("wddx")) die("skip Wddx module not loaded");
+ if (!extension_loaded('session')) die('skip Session module not enabled');
+
+ // following test code stolen from ext/session/skipif.inc
+ $save_path = ini_get("session.save_path");
+ if ($save_path) {
+ if (!file_exists($save_path)) {
+ die("skip Session save_path doesn't exist");
+ }
+
+ if ($save_path && !@is_writable($save_path)) {
+ if (($p = strpos($save_path, ';')) !== false) {
+ $save_path = substr($save_path, ++$p);
+ }
+ if (!@is_writable($save_path)) {
+ die("skip\n");
+ }
+ }
+ }
+?>
+--INI--
+precision=14
+session.serialize_handler=wddx
+session.use_cookies=0
+session.cache_limiter=
+session.save_handler=files
+--FILE--
+<?php
+ class foo {
+ public $bar = "ok";
+
+ function method() { $this->yes = "done"; }
+ }
+
+ session_start();
+
+ session_decode("<wddxPacket version='1.0'><header/><data><struct><var name='data'><struct><var name='test1'><boolean value='true'/></var><var name='test2'><string>some string</string></var><var name='test3'><number>654321</number></var><var name='test4'><array length='3'><string>some string</string><boolean value='true'/><null/></array></var></struct></var><var name='class'><struct><var name='php_class_name'><string>foo</string></var><var name='bar'><string>ok</string></var><var name='yes'><string>done</string></var></struct></var></struct></data></wddxPacket>");
+
+ var_dump($_SESSION);
+
+ session_destroy();
+?>
+--EXPECT--
+array(2) {
+ ["data"]=>
+ array(4) {
+ ["test1"]=>
+ bool(true)
+ ["test2"]=>
+ string(11) "some string"
+ ["test3"]=>
+ int(654321)
+ ["test4"]=>
+ array(3) {
+ [0]=>
+ string(11) "some string"
+ [1]=>
+ bool(true)
+ [2]=>
+ NULL
+ }
+ }
+ ["class"]=>
+ object(foo)#1 (2) {
+ ["bar"]=>
+ string(2) "ok"
+ ["yes"]=>
+ string(4) "done"
+ }
+}
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
index a4dfdcbd4d..42db979a6e 100644
--- a/ext/wddx/wddx.c
+++ b/ext/wddx/wddx.c
@@ -460,7 +460,7 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
char *key;
ulong idx;
char tmp_buf[WDDX_BUF_LEN];
- HashTable *objhash;
+ HashTable *objhash, *sleephash;
TSRMLS_FETCH();
MAKE_STD_ZVAL(fname);
@@ -471,7 +471,7 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
* array of property names to be serialized.
*/
if (call_user_function_ex(CG(function_table), &obj, fname, &retval, 0, 0, 1, NULL TSRMLS_CC) == SUCCESS) {
- if (retval && (objhash = HASH_OF(retval))) {
+ if (retval && (sleephash = HASH_OF(retval))) {
PHP_CLASS_ATTRIBUTES;
PHP_SET_CLASS_ATTRIBUTES(obj);
@@ -485,10 +485,12 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
php_wddx_add_chunk_static(packet, WDDX_VAR_E);
PHP_CLEANUP_CLASS_ATTRIBUTES();
+
+ objhash = HASH_OF(obj);
- for (zend_hash_internal_pointer_reset(objhash);
- zend_hash_get_current_data(objhash, (void **)&varname) == SUCCESS;
- zend_hash_move_forward(objhash)) {
+ for (zend_hash_internal_pointer_reset(sleephash);
+ zend_hash_get_current_data(sleephash, (void **)&varname) == SUCCESS;
+ zend_hash_move_forward(sleephash)) {
if (Z_TYPE_PP(varname) != IS_STRING) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "__sleep should return an array only containing the names of instance-variables to serialize.");
continue;
@@ -692,7 +694,7 @@ static void php_wddx_add_var(wddx_packet *packet, zval *name_var)
zval **val;
HashTable *target_hash;
TSRMLS_FETCH();
-
+
if (Z_TYPE_P(name_var) == IS_STRING) {
if (!EG(active_symbol_table)) {
zend_rebuild_symbol_table(TSRMLS_C);
@@ -1288,7 +1290,7 @@ PHP_FUNCTION(wddx_add_vars)
RETURN_FALSE;
}
- for (i=1; i<num_args; i++) {
+ for (i=0; i<num_args; i++) {
if (Z_TYPE_PP(args[i]) != IS_ARRAY && Z_TYPE_PP(args[i]) != IS_OBJECT) {
convert_to_string_ex(args[i]);
}