diff options
Diffstat (limited to 'ext/wddx')
-rw-r--r-- | ext/wddx/CREDITS | 2 | ||||
-rw-r--r-- | ext/wddx/config.m4 | 60 | ||||
-rw-r--r-- | ext/wddx/config.w32 | 13 | ||||
-rw-r--r-- | ext/wddx/package.xml | 43 | ||||
-rw-r--r-- | ext/wddx/php_wddx.h | 44 | ||||
-rw-r--r-- | ext/wddx/php_wddx_api.h | 66 | ||||
-rw-r--r-- | ext/wddx/tests/001.phpt | 59 | ||||
-rwxr-xr-x | ext/wddx/tests/bug27287.phpt | 20 | ||||
-rwxr-xr-x | ext/wddx/tests/bug34306.phpt | 14 | ||||
-rwxr-xr-x | ext/wddx/tests/bug35410.phpt | 76 | ||||
-rwxr-xr-x | ext/wddx/tests/bug35410_64bit.phpt | 76 | ||||
-rwxr-xr-x | ext/wddx/tests/bug37569.phpt | 778 | ||||
-rwxr-xr-x | ext/wddx/tests/bug37587.phpt | 34 | ||||
-rw-r--r-- | ext/wddx/tests/wddx.xml | 60 | ||||
-rw-r--r-- | ext/wddx/wddx.c | 1357 |
15 files changed, 0 insertions, 2702 deletions
diff --git a/ext/wddx/CREDITS b/ext/wddx/CREDITS deleted file mode 100644 index 4c98513048..0000000000 --- a/ext/wddx/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -WDDX -Andrei Zmievski diff --git a/ext/wddx/config.m4 b/ext/wddx/config.m4 deleted file mode 100644 index 2b02a92aa9..0000000000 --- a/ext/wddx/config.m4 +++ /dev/null @@ -1,60 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_ENABLE(wddx,whether to enable WDDX support, -[ --enable-wddx Enable WDDX support]) - -if test -z "$PHP_LIBXML_DIR"; then - PHP_ARG_WITH(libxml-dir, libxml2 install dir, - [ --with-libxml-dir=DIR WDDX: libxml2 install prefix], no, no) -fi - -PHP_ARG_WITH(libexpat-dir, libexpat dir for WDDX, -[ --with-libexpat-dir=DIR WDDX: libexpat dir for XMLRPC-EPI (deprecated)],no,no) - -if test "$PHP_WDDX" != "no"; then - - dnl - dnl Default to libxml2 if --with-libexpat-dir is not used - dnl - if test "$PHP_LIBEXPAT_DIR" = "no"; then - if test "$PHP_LIBXML" = "no"; then - AC_MSG_ERROR([WDDX extension requires LIBXML extension, add --enable-libxml]) - fi - - PHP_SETUP_LIBXML(WDDX_SHARED_LIBADD, [ - if test "$PHP_XML" = "no"; then - PHP_ADD_SOURCES(ext/xml, compat.c) - PHP_ADD_BUILD_DIR(ext/xml) - fi - ], [ - AC_MSG_ERROR([xml2-config not found. Use --with-libxml-dir=<DIR>]) - ]) - fi - - dnl - dnl Check for expat only if --with-libexpat-dir is used. - dnl - if test "$PHP_LIBEXPAT_DIR" != "no"; then - for i in $PHP_XML $PHP_LIBEXPAT_DIR /usr /usr/local; do - if test -f "$i/$PHP_LIBDIR/libexpat.a" || test -f "$i/$PHP_LIBDIR/libexpat.$SHLIB_SUFFIX_NAME"; then - EXPAT_DIR=$i - break - fi - done - - if test -z "$EXPAT_DIR"; then - AC_MSG_ERROR([not found. Please reinstall the expat distribution.]) - fi - - PHP_ADD_INCLUDE($EXPAT_DIR/include) - PHP_ADD_LIBRARY_WITH_PATH(expat, $EXPAT_DIR/$PHP_LIBDIR, WDDX_SHARED_LIBADD) - AC_DEFINE(HAVE_LIBEXPAT, 1, [ ]) - fi - - AC_DEFINE(HAVE_WDDX, 1, [ ]) - PHP_NEW_EXTENSION(wddx, wddx.c, $ext_shared) - PHP_ADD_EXTENSION_DEP(wddx, libxml) - PHP_SUBST(XMLRPC_SHARED_LIBADD) -fi diff --git a/ext/wddx/config.w32 b/ext/wddx/config.w32 deleted file mode 100644 index 7b8483d0aa..0000000000 --- a/ext/wddx/config.w32 +++ /dev/null @@ -1,13 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_WITH("wddx", "WDDX support", "yes"); - -if (PHP_WDDX == "yes" && PHP_LIBXML == "yes") { - EXTENSION("wddx", "wddx.c"); - AC_DEFINE("HAVE_WDDX", 1, "WDDX support"); - ADD_EXTENSION_DEP('wddx', 'libxml'); - CHECK_HEADER_ADD_INCLUDE("timelib_config.h", "CFLAGS_WDDX", "ext/date/lib"); -} - - diff --git a/ext/wddx/package.xml b/ext/wddx/package.xml deleted file mode 100644 index 4351d356bb..0000000000 --- a/ext/wddx/package.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1" ?> -<!DOCTYPE package SYSTEM "../pear/package.dtd"> -<package> - <name>wddx</name> - <summary>WDDX serialization functions</summary> - <maintainers> - <maintainer> - <user>andrei</user> - <name>Andrei Zmievski</name> - <email>andrei@php.net</email> - <role>lead</role> - </maintainer> - </maintainers> - <description> -These functions are intended for work with WDDX (http://www.openwddx.org/) - </description> - <license>PHP</license> - <release> - <state>beta</state> - <version>5.0.0rc1</version> - <date>2004-03-19</date> - <notes> -package.xml added to support intallation using pear installer - </notes> - <filelist> - <file role="doc" name="CREDITS"/> - <file role="src" name="config.m4"/> - <file role="src" name="config.w32"/> - <file role="src" name="wddx.c"/> - <file role="src" name="php_wddx.h"/> - <file role="src" name="php_wddx_api.h"/> - <file role="test" name="tests/001.phpt"/> - <file role="test" name="tests/wddx.xml"/> - <file role="test" name="tests/bug27287.phpt"/> - </filelist> - <deps> - <dep type="php" rel="ge" version="5" /> - </deps> - </release> -</package> -<!-- -vim:et:ts=1:sw=1 ---> diff --git a/ext/wddx/php_wddx.h b/ext/wddx/php_wddx.h deleted file mode 100644 index e495ca6bb2..0000000000 --- a/ext/wddx/php_wddx.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2006 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Andrei Zmievski <andrei@php.net> | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifndef PHP_WDDX_H -#define PHP_WDDX_H - -#if HAVE_WDDX - -extern zend_module_entry wddx_module_entry; -#define wddx_module_ptr &wddx_module_entry - -PHP_FUNCTION(wddx_serialize_value); -PHP_FUNCTION(wddx_serialize_vars); -PHP_FUNCTION(wddx_packet_start); -PHP_FUNCTION(wddx_packet_end); -PHP_FUNCTION(wddx_add_vars); -PHP_FUNCTION(wddx_deserialize); - -#else - -#define wddx_module_ptr NULL - -#endif /* HAVE_WDDX */ - -#define phpext_wddx_ptr wddx_module_ptr - -#endif /* !PHP_WDDX_H */ diff --git a/ext/wddx/php_wddx_api.h b/ext/wddx/php_wddx_api.h deleted file mode 100644 index 582b058b89..0000000000 --- a/ext/wddx/php_wddx_api.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2006 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Andrei Zmievski <andrei@ispi.net> | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifndef PHP_WDDX_API_H -#define PHP_WDDX_API_H - -#include "ext/standard/php_smart_str.h" - -#define WDDX_ARRAY_S "<array length='%d'>" -#define WDDX_ARRAY_E "</array>" -#define WDDX_BINARY_S "<binary>" -#define WDDX_BINARY_E "</binary>" -#define WDDX_BOOLEAN "<boolean value='%s'/>" -#define WDDX_CHAR "<char code='%02X'/>" -#define WDDX_COMMENT_S "<comment>" -#define WDDX_COMMENT_E "</comment>" -#define WDDX_DATA_S "<data>" -#define WDDX_DATA_E "</data>" -#define WDDX_HEADER "<header/>" -#define WDDX_HEADER_S "<header>" -#define WDDX_HEADER_E "</header>" -#define WDDX_NULL "<null/>" -#define WDDX_NUMBER "<number>%s</number>" -#define WDDX_PACKET_S "<wddxPacket version='1.0'>" -#define WDDX_PACKET_E "</wddxPacket>" -#define WDDX_STRING_S "<string>" -#define WDDX_STRING_E "</string>" -#define WDDX_STRUCT_S "<struct>" -#define WDDX_STRUCT_E "</struct>" -#define WDDX_VAR_S "<var name='%s'>" -#define WDDX_VAR_E "</var>" - -#define php_wddx_add_chunk(packet, str) smart_str_appends(packet, str) -#define php_wddx_add_chunk_ex(packet, str, len) smart_str_appendl(packet, str, len) -#define php_wddx_add_chunk_static(packet, str) smart_str_appendl(packet, str, sizeof(str)-1) - -typedef smart_str wddx_packet; - -wddx_packet* php_wddx_constructor(void); -void php_wddx_destructor(wddx_packet *packet); - -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, int name_len TSRMLS_DC); -int php_wddx_deserialize_ex(char *, int, zval *return_value); -#define php_wddx_gather(packet) estrndup(packet->c, packet->len) - -#endif /* PHP_WDDX_API_H */ diff --git a/ext/wddx/tests/001.phpt b/ext/wddx/tests/001.phpt deleted file mode 100644 index ffca63cd94..0000000000 --- a/ext/wddx/tests/001.phpt +++ /dev/null @@ -1,59 +0,0 @@ ---TEST-- -wddx deserialization test ---SKIPIF-- -<?php if (!extension_loaded("wddx")) print "skip"; ?> ---FILE-- -<?php - $path = dirname(__FILE__); - var_dump(wddx_deserialize(file_get_contents("{$path}/wddx.xml"))); -?> ---EXPECT-- -array(11) { - ["aNull"]=> - NULL - ["aString"]=> - string(8) "a string" - ["aNumber"]=> - float(-12.456) - ["aDateTime"]=> - int(897625932) - ["aDateTime2"]=> - int(329632332) - ["aDateTime3"]=> - string(22) "2040-06-12T04:32:12+00" - ["aBoolean"]=> - bool(true) - ["anArray"]=> - array(2) { - [0]=> - int(10) - [1]=> - string(14) "second element" - } - ["aBinary"]=> - string(11) "binary data" - ["anObject"]=> - array(2) { - ["s"]=> - string(8) "a string" - ["n"]=> - float(-12.456) - } - ["aRecordset"]=> - array(2) { - ["NAME"]=> - array(2) { - [0]=> - string(8) "John Doe" - [1]=> - string(8) "Jane Doe" - } - ["AGE"]=> - array(2) { - [0]=> - int(34) - [1]=> - int(31) - } - } -} diff --git a/ext/wddx/tests/bug27287.phpt b/ext/wddx/tests/bug27287.phpt deleted file mode 100755 index 72ac317aa0..0000000000 --- a/ext/wddx/tests/bug27287.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -Bug #27287 (segfault with deserializing object data) ---SKIPIF-- -<?php if (!extension_loaded("wddx")) print "skip"; ?> ---FILE-- -<?php - - class foo { - } - $foo = new foo(); - $foo->abc = 'def'; - - $string = wddx_serialize_value($foo); - $bar = wddx_deserialize($string); - - echo "OK\n"; - -?> ---EXPECT-- -OK diff --git a/ext/wddx/tests/bug34306.phpt b/ext/wddx/tests/bug34306.phpt deleted file mode 100755 index 5f1a0df72f..0000000000 --- a/ext/wddx/tests/bug34306.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -#34306 (wddx_serialize_value() crashes with long array keys) ---SKIPIF-- -<?php if (!extension_loaded("wddx")) print "skip"; ?> ---FILE-- -<?php - -$var = array('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa12345678901234567890123456789012345678901234567890ba12345678901234567890123456789012345678901234567890ba12345678901234567890123456789012345678901234567890ba12345678901234567890123456789012345678901234567890b12345678901234567891234567890123123121231211111' => 1); -$buf = wddx_serialize_value($var, 'name'); -echo "OK\n"; - -?> ---EXPECT-- -OK diff --git a/ext/wddx/tests/bug35410.phpt b/ext/wddx/tests/bug35410.phpt deleted file mode 100755 index 3b4b9b62cf..0000000000 --- a/ext/wddx/tests/bug35410.phpt +++ /dev/null @@ -1,76 +0,0 @@ ---TEST-- -#35410 (wddx_deserialize() doesn't handle large ints as keys properly) ---SKIPIF-- -<?php - if (!extension_loaded("wddx")) print "skip"; - if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); -?> ---FILE-- -<?php -$wddx = <<<WDX -<wddxpacket version="1.0"> -<header> -<comment>Content Configuration File</comment> -</header> -<data> -<struct> -<var name="content_queries"> -<struct> -<var name="content_113300831086270200"> -<struct> -<var name="113301888545229100"> -<struct> -<var name="max"> -<number>10</number> -</var> -<var name="cache"> -<number>4</number> -</var> -<var name="order"> -<struct> -<var name="content_113300831086270200"> -<struct> -<var name="CMS_BUILD"> -<string>desc</string> -</var> -</struct> -</var> -</struct> -</var> -</struct> -</var> -</struct> -</var> -</struct> -</var> -</struct> -</data> -</wddxpacket> -WDX; - -var_dump(wddx_deserialize($wddx)); -?> ---EXPECT-- -array(1) { - ["content_queries"]=> - array(1) { - ["content_113300831086270200"]=> - array(1) { - ["113301888545229100"]=> - array(3) { - ["max"]=> - int(10) - ["cache"]=> - int(4) - ["order"]=> - array(1) { - ["content_113300831086270200"]=> - array(1) { - ["CMS_BUILD"]=> - string(4) "desc" - } - } - } - } - } -} diff --git a/ext/wddx/tests/bug35410_64bit.phpt b/ext/wddx/tests/bug35410_64bit.phpt deleted file mode 100755 index 15377b175e..0000000000 --- a/ext/wddx/tests/bug35410_64bit.phpt +++ /dev/null @@ -1,76 +0,0 @@ ---TEST-- -#35410 (wddx_deserialize() doesn't handle large ints as keys properly) ---SKIPIF-- -<?php - if (!extension_loaded("wddx")) print "skip"; - if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); -?> ---FILE-- -<?php -$wddx = <<<WDX -<wddxpacket version="1.0"> -<header> -<comment>Content Configuration File</comment> -</header> -<data> -<struct> -<var name="content_queries"> -<struct> -<var name="content_113300831086270200"> -<struct> -<var name="113301888545229100"> -<struct> -<var name="max"> -<number>10</number> -</var> -<var name="cache"> -<number>4</number> -</var> -<var name="order"> -<struct> -<var name="content_113300831086270200"> -<struct> -<var name="CMS_BUILD"> -<string>desc</string> -</var> -</struct> -</var> -</struct> -</var> -</struct> -</var> -</struct> -</var> -</struct> -</var> -</struct> -</data> -</wddxpacket> -WDX; - -var_dump(wddx_deserialize($wddx)); -?> ---EXPECT-- -array(1) { - ["content_queries"]=> - array(1) { - ["content_113300831086270200"]=> - array(1) { - [113301888545229100]=> - array(3) { - ["max"]=> - int(10) - ["cache"]=> - int(4) - ["order"]=> - array(1) { - ["content_113300831086270200"]=> - array(1) { - ["CMS_BUILD"]=> - string(4) "desc" - } - } - } - } - } -} diff --git a/ext/wddx/tests/bug37569.phpt b/ext/wddx/tests/bug37569.phpt deleted file mode 100755 index f7422c9ec2..0000000000 --- a/ext/wddx/tests/bug37569.phpt +++ /dev/null @@ -1,778 +0,0 @@ ---TEST-- -Bug #37569 (WDDX incorrectly encodes high-ascii characters) ---SKIPIF-- -<?php if (!extension_loaded("wddx")) print "skip"; ?> ---FILE-- -<?php -for ($i = 65; $i < 256; $i++) { - $v = chr($i); - $ret = wddx_serialize_value($v); - echo $ret . "\n"; - var_dump(ord($v), ord(wddx_deserialize($ret)), $v == wddx_deserialize($ret)); -} -?> ---EXPECT-- -<wddxPacket version='1.0'><header/><data><string>A</string></data></wddxPacket> -int(65) -int(65) -bool(true) -<wddxPacket version='1.0'><header/><data><string>B</string></data></wddxPacket> -int(66) -int(66) -bool(true) -<wddxPacket version='1.0'><header/><data><string>C</string></data></wddxPacket> -int(67) -int(67) -bool(true) -<wddxPacket version='1.0'><header/><data><string>D</string></data></wddxPacket> -int(68) -int(68) -bool(true) -<wddxPacket version='1.0'><header/><data><string>E</string></data></wddxPacket> -int(69) -int(69) -bool(true) -<wddxPacket version='1.0'><header/><data><string>F</string></data></wddxPacket> -int(70) -int(70) -bool(true) -<wddxPacket version='1.0'><header/><data><string>G</string></data></wddxPacket> -int(71) -int(71) -bool(true) -<wddxPacket version='1.0'><header/><data><string>H</string></data></wddxPacket> -int(72) -int(72) -bool(true) -<wddxPacket version='1.0'><header/><data><string>I</string></data></wddxPacket> -int(73) -int(73) -bool(true) -<wddxPacket version='1.0'><header/><data><string>J</string></data></wddxPacket> -int(74) -int(74) -bool(true) -<wddxPacket version='1.0'><header/><data><string>K</string></data></wddxPacket> -int(75) -int(75) -bool(true) -<wddxPacket version='1.0'><header/><data><string>L</string></data></wddxPacket> -int(76) -int(76) -bool(true) -<wddxPacket version='1.0'><header/><data><string>M</string></data></wddxPacket> -int(77) -int(77) -bool(true) -<wddxPacket version='1.0'><header/><data><string>N</string></data></wddxPacket> -int(78) -int(78) -bool(true) -<wddxPacket version='1.0'><header/><data><string>O</string></data></wddxPacket> -int(79) -int(79) -bool(true) -<wddxPacket version='1.0'><header/><data><string>P</string></data></wddxPacket> -int(80) -int(80) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Q</string></data></wddxPacket> -int(81) -int(81) -bool(true) -<wddxPacket version='1.0'><header/><data><string>R</string></data></wddxPacket> -int(82) -int(82) -bool(true) -<wddxPacket version='1.0'><header/><data><string>S</string></data></wddxPacket> -int(83) -int(83) -bool(true) -<wddxPacket version='1.0'><header/><data><string>T</string></data></wddxPacket> -int(84) -int(84) -bool(true) -<wddxPacket version='1.0'><header/><data><string>U</string></data></wddxPacket> -int(85) -int(85) -bool(true) -<wddxPacket version='1.0'><header/><data><string>V</string></data></wddxPacket> -int(86) -int(86) -bool(true) -<wddxPacket version='1.0'><header/><data><string>W</string></data></wddxPacket> -int(87) -int(87) -bool(true) -<wddxPacket version='1.0'><header/><data><string>X</string></data></wddxPacket> -int(88) -int(88) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Y</string></data></wddxPacket> -int(89) -int(89) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Z</string></data></wddxPacket> -int(90) -int(90) -bool(true) -<wddxPacket version='1.0'><header/><data><string>[</string></data></wddxPacket> -int(91) -int(91) -bool(true) -<wddxPacket version='1.0'><header/><data><string>\</string></data></wddxPacket> -int(92) -int(92) -bool(true) -<wddxPacket version='1.0'><header/><data><string>]</string></data></wddxPacket> -int(93) -int(93) -bool(true) -<wddxPacket version='1.0'><header/><data><string>^</string></data></wddxPacket> -int(94) -int(94) -bool(true) -<wddxPacket version='1.0'><header/><data><string>_</string></data></wddxPacket> -int(95) -int(95) -bool(true) -<wddxPacket version='1.0'><header/><data><string>`</string></data></wddxPacket> -int(96) -int(96) -bool(true) -<wddxPacket version='1.0'><header/><data><string>a</string></data></wddxPacket> -int(97) -int(97) -bool(true) -<wddxPacket version='1.0'><header/><data><string>b</string></data></wddxPacket> -int(98) -int(98) -bool(true) -<wddxPacket version='1.0'><header/><data><string>c</string></data></wddxPacket> -int(99) -int(99) -bool(true) -<wddxPacket version='1.0'><header/><data><string>d</string></data></wddxPacket> -int(100) -int(100) -bool(true) -<wddxPacket version='1.0'><header/><data><string>e</string></data></wddxPacket> -int(101) -int(101) -bool(true) -<wddxPacket version='1.0'><header/><data><string>f</string></data></wddxPacket> -int(102) -int(102) -bool(true) -<wddxPacket version='1.0'><header/><data><string>g</string></data></wddxPacket> -int(103) -int(103) -bool(true) -<wddxPacket version='1.0'><header/><data><string>h</string></data></wddxPacket> -int(104) -int(104) -bool(true) -<wddxPacket version='1.0'><header/><data><string>i</string></data></wddxPacket> -int(105) -int(105) -bool(true) -<wddxPacket version='1.0'><header/><data><string>j</string></data></wddxPacket> -int(106) -int(106) -bool(true) -<wddxPacket version='1.0'><header/><data><string>k</string></data></wddxPacket> -int(107) -int(107) -bool(true) -<wddxPacket version='1.0'><header/><data><string>l</string></data></wddxPacket> -int(108) -int(108) -bool(true) -<wddxPacket version='1.0'><header/><data><string>m</string></data></wddxPacket> -int(109) -int(109) -bool(true) -<wddxPacket version='1.0'><header/><data><string>n</string></data></wddxPacket> -int(110) -int(110) -bool(true) -<wddxPacket version='1.0'><header/><data><string>o</string></data></wddxPacket> -int(111) -int(111) -bool(true) -<wddxPacket version='1.0'><header/><data><string>p</string></data></wddxPacket> -int(112) -int(112) -bool(true) -<wddxPacket version='1.0'><header/><data><string>q</string></data></wddxPacket> -int(113) -int(113) -bool(true) -<wddxPacket version='1.0'><header/><data><string>r</string></data></wddxPacket> -int(114) -int(114) -bool(true) -<wddxPacket version='1.0'><header/><data><string>s</string></data></wddxPacket> -int(115) -int(115) -bool(true) -<wddxPacket version='1.0'><header/><data><string>t</string></data></wddxPacket> -int(116) -int(116) -bool(true) -<wddxPacket version='1.0'><header/><data><string>u</string></data></wddxPacket> -int(117) -int(117) -bool(true) -<wddxPacket version='1.0'><header/><data><string>v</string></data></wddxPacket> -int(118) -int(118) -bool(true) -<wddxPacket version='1.0'><header/><data><string>w</string></data></wddxPacket> -int(119) -int(119) -bool(true) -<wddxPacket version='1.0'><header/><data><string>x</string></data></wddxPacket> -int(120) -int(120) -bool(true) -<wddxPacket version='1.0'><header/><data><string>y</string></data></wddxPacket> -int(121) -int(121) -bool(true) -<wddxPacket version='1.0'><header/><data><string>z</string></data></wddxPacket> -int(122) -int(122) -bool(true) -<wddxPacket version='1.0'><header/><data><string>{</string></data></wddxPacket> -int(123) -int(123) -bool(true) -<wddxPacket version='1.0'><header/><data><string>|</string></data></wddxPacket> -int(124) -int(124) -bool(true) -<wddxPacket version='1.0'><header/><data><string>}</string></data></wddxPacket> -int(125) -int(125) -bool(true) -<wddxPacket version='1.0'><header/><data><string>~</string></data></wddxPacket> -int(126) -int(126) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(127) -int(127) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(128) -int(128) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(129) -int(129) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(130) -int(130) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(131) -int(131) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(132) -int(132) -bool(true) -<wddxPacket version='1.0'><header/><data><string>
</string></data></wddxPacket> -int(133) -int(133) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(134) -int(134) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(135) -int(135) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(136) -int(136) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(137) -int(137) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(138) -int(138) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(139) -int(139) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(140) -int(140) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(141) -int(141) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(142) -int(142) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(143) -int(143) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(144) -int(144) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(145) -int(145) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(146) -int(146) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(147) -int(147) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(148) -int(148) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(149) -int(149) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(150) -int(150) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(151) -int(151) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(152) -int(152) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(153) -int(153) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(154) -int(154) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(155) -int(155) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(156) -int(156) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(157) -int(157) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(158) -int(158) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(159) -int(159) -bool(true) -<wddxPacket version='1.0'><header/><data><string> </string></data></wddxPacket> -int(160) -int(160) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¡</string></data></wddxPacket> -int(161) -int(161) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¢</string></data></wddxPacket> -int(162) -int(162) -bool(true) -<wddxPacket version='1.0'><header/><data><string>£</string></data></wddxPacket> -int(163) -int(163) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¤</string></data></wddxPacket> -int(164) -int(164) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¥</string></data></wddxPacket> -int(165) -int(165) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¦</string></data></wddxPacket> -int(166) -int(166) -bool(true) -<wddxPacket version='1.0'><header/><data><string>§</string></data></wddxPacket> -int(167) -int(167) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¨</string></data></wddxPacket> -int(168) -int(168) -bool(true) -<wddxPacket version='1.0'><header/><data><string>©</string></data></wddxPacket> -int(169) -int(169) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ª</string></data></wddxPacket> -int(170) -int(170) -bool(true) -<wddxPacket version='1.0'><header/><data><string>«</string></data></wddxPacket> -int(171) -int(171) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¬</string></data></wddxPacket> -int(172) -int(172) -bool(true) -<wddxPacket version='1.0'><header/><data><string></string></data></wddxPacket> -int(173) -int(173) -bool(true) -<wddxPacket version='1.0'><header/><data><string>®</string></data></wddxPacket> -int(174) -int(174) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¯</string></data></wddxPacket> -int(175) -int(175) -bool(true) -<wddxPacket version='1.0'><header/><data><string>°</string></data></wddxPacket> -int(176) -int(176) -bool(true) -<wddxPacket version='1.0'><header/><data><string>±</string></data></wddxPacket> -int(177) -int(177) -bool(true) -<wddxPacket version='1.0'><header/><data><string>²</string></data></wddxPacket> -int(178) -int(178) -bool(true) -<wddxPacket version='1.0'><header/><data><string>³</string></data></wddxPacket> -int(179) -int(179) -bool(true) -<wddxPacket version='1.0'><header/><data><string>´</string></data></wddxPacket> -int(180) -int(180) -bool(true) -<wddxPacket version='1.0'><header/><data><string>µ</string></data></wddxPacket> -int(181) -int(181) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¶</string></data></wddxPacket> -int(182) -int(182) -bool(true) -<wddxPacket version='1.0'><header/><data><string>·</string></data></wddxPacket> -int(183) -int(183) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¸</string></data></wddxPacket> -int(184) -int(184) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¹</string></data></wddxPacket> -int(185) -int(185) -bool(true) -<wddxPacket version='1.0'><header/><data><string>º</string></data></wddxPacket> -int(186) -int(186) -bool(true) -<wddxPacket version='1.0'><header/><data><string>»</string></data></wddxPacket> -int(187) -int(187) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¼</string></data></wddxPacket> -int(188) -int(188) -bool(true) -<wddxPacket version='1.0'><header/><data><string>½</string></data></wddxPacket> -int(189) -int(189) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¾</string></data></wddxPacket> -int(190) -int(190) -bool(true) -<wddxPacket version='1.0'><header/><data><string>¿</string></data></wddxPacket> -int(191) -int(191) -bool(true) -<wddxPacket version='1.0'><header/><data><string>À</string></data></wddxPacket> -int(192) -int(192) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Á</string></data></wddxPacket> -int(193) -int(193) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Â</string></data></wddxPacket> -int(194) -int(194) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ã</string></data></wddxPacket> -int(195) -int(195) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ä</string></data></wddxPacket> -int(196) -int(196) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Å</string></data></wddxPacket> -int(197) -int(197) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Æ</string></data></wddxPacket> -int(198) -int(198) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ç</string></data></wddxPacket> -int(199) -int(199) -bool(true) -<wddxPacket version='1.0'><header/><data><string>È</string></data></wddxPacket> -int(200) -int(200) -bool(true) -<wddxPacket version='1.0'><header/><data><string>É</string></data></wddxPacket> -int(201) -int(201) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ê</string></data></wddxPacket> -int(202) -int(202) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ë</string></data></wddxPacket> -int(203) -int(203) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ì</string></data></wddxPacket> -int(204) -int(204) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Í</string></data></wddxPacket> -int(205) -int(205) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Î</string></data></wddxPacket> -int(206) -int(206) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ï</string></data></wddxPacket> -int(207) -int(207) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ð</string></data></wddxPacket> -int(208) -int(208) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ñ</string></data></wddxPacket> -int(209) -int(209) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ò</string></data></wddxPacket> -int(210) -int(210) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ó</string></data></wddxPacket> -int(211) -int(211) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ô</string></data></wddxPacket> -int(212) -int(212) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Õ</string></data></wddxPacket> -int(213) -int(213) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ö</string></data></wddxPacket> -int(214) -int(214) -bool(true) -<wddxPacket version='1.0'><header/><data><string>×</string></data></wddxPacket> -int(215) -int(215) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ø</string></data></wddxPacket> -int(216) -int(216) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ù</string></data></wddxPacket> -int(217) -int(217) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ú</string></data></wddxPacket> -int(218) -int(218) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Û</string></data></wddxPacket> -int(219) -int(219) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ü</string></data></wddxPacket> -int(220) -int(220) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Ý</string></data></wddxPacket> -int(221) -int(221) -bool(true) -<wddxPacket version='1.0'><header/><data><string>Þ</string></data></wddxPacket> -int(222) -int(222) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ß</string></data></wddxPacket> -int(223) -int(223) -bool(true) -<wddxPacket version='1.0'><header/><data><string>à</string></data></wddxPacket> -int(224) -int(224) -bool(true) -<wddxPacket version='1.0'><header/><data><string>á</string></data></wddxPacket> -int(225) -int(225) -bool(true) -<wddxPacket version='1.0'><header/><data><string>â</string></data></wddxPacket> -int(226) -int(226) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ã</string></data></wddxPacket> -int(227) -int(227) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ä</string></data></wddxPacket> -int(228) -int(228) -bool(true) -<wddxPacket version='1.0'><header/><data><string>å</string></data></wddxPacket> -int(229) -int(229) -bool(true) -<wddxPacket version='1.0'><header/><data><string>æ</string></data></wddxPacket> -int(230) -int(230) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ç</string></data></wddxPacket> -int(231) -int(231) -bool(true) -<wddxPacket version='1.0'><header/><data><string>è</string></data></wddxPacket> -int(232) -int(232) -bool(true) -<wddxPacket version='1.0'><header/><data><string>é</string></data></wddxPacket> -int(233) -int(233) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ê</string></data></wddxPacket> -int(234) -int(234) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ë</string></data></wddxPacket> -int(235) -int(235) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ì</string></data></wddxPacket> -int(236) -int(236) -bool(true) -<wddxPacket version='1.0'><header/><data><string>í</string></data></wddxPacket> -int(237) -int(237) -bool(true) -<wddxPacket version='1.0'><header/><data><string>î</string></data></wddxPacket> -int(238) -int(238) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ï</string></data></wddxPacket> -int(239) -int(239) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ð</string></data></wddxPacket> -int(240) -int(240) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ñ</string></data></wddxPacket> -int(241) -int(241) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ò</string></data></wddxPacket> -int(242) -int(242) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ó</string></data></wddxPacket> -int(243) -int(243) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ô</string></data></wddxPacket> -int(244) -int(244) -bool(true) -<wddxPacket version='1.0'><header/><data><string>õ</string></data></wddxPacket> -int(245) -int(245) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ö</string></data></wddxPacket> -int(246) -int(246) -bool(true) -<wddxPacket version='1.0'><header/><data><string>÷</string></data></wddxPacket> -int(247) -int(247) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ø</string></data></wddxPacket> -int(248) -int(248) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ù</string></data></wddxPacket> -int(249) -int(249) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ú</string></data></wddxPacket> -int(250) -int(250) -bool(true) -<wddxPacket version='1.0'><header/><data><string>û</string></data></wddxPacket> -int(251) -int(251) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ü</string></data></wddxPacket> -int(252) -int(252) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ý</string></data></wddxPacket> -int(253) -int(253) -bool(true) -<wddxPacket version='1.0'><header/><data><string>þ</string></data></wddxPacket> -int(254) -int(254) -bool(true) -<wddxPacket version='1.0'><header/><data><string>ÿ</string></data></wddxPacket> -int(255) -int(255) -bool(true)
\ No newline at end of file diff --git a/ext/wddx/tests/bug37587.phpt b/ext/wddx/tests/bug37587.phpt deleted file mode 100755 index 5361d38dae..0000000000 --- a/ext/wddx/tests/bug37587.phpt +++ /dev/null @@ -1,34 +0,0 @@ ---TEST-- -Bug #37587 (var without attribute causes segfault) ---SKIPIF-- -<?php if (!extension_loaded("wddx")) print "skip"; ?> ---FILE-- -<?php - -var_dump(wddx_deserialize(file_get_contents(<<<EOF -data:,<wddxPacket version='1.0'> -<header/> -<data> - <array length='1'> - <var> - <struct> - <var name='test'><string>Hello World</string></var> - </struct> - </var> - </array> -</data> -</wddxPacket> -EOF -))); - -?> -===DONE=== ---EXPECT-- -array(1) { - [0]=> - array(1) { - ["test"]=> - string(11) "Hello World" - } -} -===DONE=== diff --git a/ext/wddx/tests/wddx.xml b/ext/wddx/tests/wddx.xml deleted file mode 100644 index 00857095c9..0000000000 --- a/ext/wddx/tests/wddx.xml +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version='1.0'?> -<!DOCTYPE wddxPacket SYSTEM 'wddx_0100.dtd'> -<wddxPacket version='1.0'> -<header/> - <data> - <struct> - <var name='aNull'> - <null/> - </var> - <var name='aString'> - <string>a string</string> - </var> - <var name='aNumber'> - <number>-12.456</number> - </var> - <var name='aDateTime'> - <dateTime>1998-06-12T04:32:12+00</dateTime> - </var> - <var name='aDateTime2'> - <dateTime>1980-06-12T04:32:12+00</dateTime> - </var> - <var name='aDateTime3'> - <dateTime>2040-06-12T04:32:12+00</dateTime> - </var> - <var name='aBoolean'> - <boolean value='true'/> - </var> - <var name='anArray'> - <array length='2'> - <number>10</number> - <string>second element</string> - </array> - </var> - <var name='aBinary'> - <binary length='11'>YmluYXJ5IGRhdGE=</binary> - </var> - <var name='anObject'> - <struct> - <var name='s'> - <string>a string</string> - </var> - <var name='n'> - <number>-12.456</number> - </var> - </struct> - </var> - <var name='aRecordset'> - <recordset rowCount='2' fieldNames='NAME,AGE'> - <field name='NAME'> - <string>John Doe</string> - <string>Jane Doe</string> - </field> - <field name='AGE'> - <number>34</number> - <number>31</number> - </field> - </recordset> - </struct> - </data> -</wddxPacket> diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c deleted file mode 100644 index 887c593461..0000000000 --- a/ext/wddx/wddx.c +++ /dev/null @@ -1,1357 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2006 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Andrei Zmievski <andrei@php.net> | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if HAVE_WDDX - -#include "ext/xml/expat_compat.h" -#include "php_wddx.h" -#include "php_wddx_api.h" - -#define PHP_XML_INTERNAL -#include "ext/xml/php_xml.h" -#include "ext/standard/php_incomplete_class.h" -#include "ext/standard/base64.h" -#include "ext/standard/info.h" -#include "ext/standard/php_smart_str.h" -#include "ext/standard/html.h" -#include "ext/standard/php_string.h" -#include "ext/date/php_date.h" -#include "zend_globals.h" - -#define WDDX_BUF_LEN 256 -#define PHP_CLASS_NAME_VAR "php_class_name" - -#define EL_ARRAY "array" -#define EL_BINARY "binary" -#define EL_BOOLEAN "boolean" -#define EL_CHAR "char" -#define EL_CHAR_CODE "code" -#define EL_NULL "null" -#define EL_NUMBER "number" -#define EL_PACKET "wddxPacket" -#define EL_STRING "string" -#define EL_STRUCT "struct" -#define EL_VALUE "value" -#define EL_VAR "var" -#define EL_NAME "name" -#define EL_VERSION "version" -#define EL_RECORDSET "recordset" -#define EL_FIELD "field" -#define EL_DATETIME "dateTime" - -#define php_wddx_deserialize(a,b) \ - php_wddx_deserialize_ex((a)->value.str.val, (a)->value.str.len, (b)) - -#define SET_STACK_VARNAME \ - if (stack->varname) { \ - ent.varname = estrdup(stack->varname); \ - efree(stack->varname); \ - stack->varname = NULL; \ - } else \ - ent.varname = NULL; \ - -static int le_wddx; - -typedef struct { - zval *data; - enum { - ST_ARRAY, - ST_BOOLEAN, - ST_NULL, - ST_NUMBER, - ST_STRING, - ST_BINARY, - ST_STRUCT, - ST_RECORDSET, - ST_FIELD, - ST_DATETIME - } type; - char *varname; -} st_entry; - -typedef struct { - int top, max; - char *varname; - zend_bool done; - void **elements; -} wddx_stack; - - -static void php_wddx_process_data(void *user_data, const XML_Char *s, int len); - -/* {{{ wddx_functions[] - */ -zend_function_entry wddx_functions[] = { - PHP_FE(wddx_serialize_value, NULL) - PHP_FE(wddx_serialize_vars, NULL) - PHP_FE(wddx_packet_start, NULL) - PHP_FE(wddx_packet_end, NULL) - PHP_FE(wddx_add_vars, NULL) - PHP_FE(wddx_deserialize, NULL) - {NULL, NULL, NULL} -}; -/* }}} */ - -PHP_MINIT_FUNCTION(wddx); -PHP_MINFO_FUNCTION(wddx); - -/* {{{ dynamically loadable module stuff */ -#ifdef COMPILE_DL_WDDX -ZEND_GET_MODULE(wddx) -#endif /* COMPILE_DL_WDDX */ -/* }}} */ - -/* {{{ wddx_module_entry - */ -zend_module_entry wddx_module_entry = { - STANDARD_MODULE_HEADER, - "wddx", - wddx_functions, - PHP_MINIT(wddx), - NULL, - NULL, - NULL, - PHP_MINFO(wddx), - NO_VERSION_YET, - STANDARD_MODULE_PROPERTIES -}; -/* }}} */ - -/* {{{ wddx_stack_init - */ -static int wddx_stack_init(wddx_stack *stack) -{ - stack->top = 0; - stack->elements = (void **) safe_emalloc(sizeof(void **), STACK_BLOCK_SIZE, 0); - stack->max = STACK_BLOCK_SIZE; - stack->varname = NULL; - stack->done = 0; - - return SUCCESS; -} -/* }}} */ - -/* {{{ wddx_stack_push - */ -static int wddx_stack_push(wddx_stack *stack, void *element, int size) -{ - if (stack->top >= stack->max) { /* we need to allocate more memory */ - stack->elements = (void **) erealloc(stack->elements, - (sizeof(void **) * (stack->max += STACK_BLOCK_SIZE))); - } - stack->elements[stack->top] = (void *) emalloc(size); - memcpy(stack->elements[stack->top], element, size); - return stack->top++; -} -/* }}} */ - -/* {{{ wddx_stack_top - */ -static int wddx_stack_top(wddx_stack *stack, void **element) -{ - if (stack->top > 0) { - *element = stack->elements[stack->top - 1]; - return SUCCESS; - } else { - *element = NULL; - return FAILURE; - } -} -/* }}} */ - -/* {{{ wddx_stack_is_empty - */ -static int wddx_stack_is_empty(wddx_stack *stack) -{ - if (stack->top == 0) { - return 1; - } else { - return 0; - } -} -/* }}} */ - -/* {{{ wddx_stack_destroy - */ -static int wddx_stack_destroy(wddx_stack *stack) -{ - register int i; - - if (stack->elements) { - for (i = 0; i < stack->top; i++) { - if (((st_entry *)stack->elements[i])->data) - { - zval_ptr_dtor(&((st_entry *)stack->elements[i])->data); - } - if (((st_entry *)stack->elements[i])->varname) - efree(((st_entry *)stack->elements[i])->varname); - efree(stack->elements[i]); - } - efree(stack->elements); - } - return SUCCESS; -} -/* }}} */ - -/* {{{ release_wddx_packet_rsrc - */ -static void release_wddx_packet_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - smart_str *str = (smart_str *)rsrc->ptr; - smart_str_free(str); - efree(str); -} -/* }}} */ - -#include "ext/session/php_session.h" - -#if HAVE_PHP_SESSION && !defined(COMPILE_DL_SESSION) -/* {{{ PS_SERIALIZER_ENCODE_FUNC - */ -PS_SERIALIZER_ENCODE_FUNC(wddx) -{ - wddx_packet *packet; - PS_ENCODE_VARS; - - packet = php_wddx_constructor(); - - php_wddx_packet_start(packet, NULL, 0); - php_wddx_add_chunk_static(packet, WDDX_STRUCT_S); - - PS_ENCODE_LOOP( - php_wddx_serialize_var(packet, *struc, key, key_length TSRMLS_CC); - ); - - php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); - php_wddx_packet_end(packet); - *newstr = php_wddx_gather(packet); - php_wddx_destructor(packet); - - if (newlen) - *newlen = strlen(*newstr); - - return SUCCESS; -} -/* }}} */ - -/* {{{ PS_SERIALIZER_DECODE_FUNC - */ -PS_SERIALIZER_DECODE_FUNC(wddx) -{ - zval *retval; - zval **ent; - char *key; - uint key_length; - char tmp[128]; - ulong idx; - int hash_type; - int ret; - - if (vallen == 0) - return SUCCESS; - - MAKE_STD_ZVAL(retval); - - if ((ret = php_wddx_deserialize_ex((char *)val, vallen, retval)) == SUCCESS) { - - for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(retval)); - zend_hash_get_current_data(Z_ARRVAL_P(retval), (void **) &ent) == SUCCESS; - zend_hash_move_forward(Z_ARRVAL_P(retval))) { - hash_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(retval), &key, &key_length, &idx, 0, NULL); - - switch (hash_type) { - case HASH_KEY_IS_LONG: - sprintf(tmp, "%ld", idx); - key = tmp; - /* fallthru */ - case HASH_KEY_IS_STRING: - php_set_session_var(key, key_length-1, *ent, NULL TSRMLS_CC); - PS_ADD_VAR(key); - } - } - } - - zval_ptr_dtor(&retval); - - return ret; -} -/* }}} */ -#endif - -/* {{{ PHP_MINIT_FUNCTION - */ -PHP_MINIT_FUNCTION(wddx) -{ - le_wddx = zend_register_list_destructors_ex(release_wddx_packet_rsrc, NULL, "wddx", module_number); - -#if HAVE_PHP_SESSION && !defined(COMPILE_DL_SESSION) - php_session_register_serializer("wddx", - PS_SERIALIZER_ENCODE_NAME(wddx), - PS_SERIALIZER_DECODE_NAME(wddx)); -#endif - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MINFO_FUNCTION - */ -PHP_MINFO_FUNCTION(wddx) -{ - php_info_print_table_start(); -#if HAVE_PHP_SESSION && !defined(COMPILE_DL_SESSION) - php_info_print_table_header(2, "WDDX Support", "enabled" ); - php_info_print_table_row(2, "WDDX Session Serializer", "enabled" ); -#else - php_info_print_table_row(2, "WDDX Support", "enabled" ); -#endif - php_info_print_table_end(); -} -/* }}} */ - -/* {{{ php_wddx_packet_start - */ -void php_wddx_packet_start(wddx_packet *packet, char *comment, int comment_len) -{ - php_wddx_add_chunk_static(packet, WDDX_PACKET_S); - if (comment) { - php_wddx_add_chunk_static(packet, WDDX_HEADER_S); - php_wddx_add_chunk_static(packet, WDDX_COMMENT_S); - php_wddx_add_chunk_ex(packet, comment, comment_len); - php_wddx_add_chunk_static(packet, WDDX_COMMENT_E); - php_wddx_add_chunk_static(packet, WDDX_HEADER_E); - } else - php_wddx_add_chunk_static(packet, WDDX_HEADER); - php_wddx_add_chunk_static(packet, WDDX_DATA_S); -} -/* }}} */ - -/* {{{ php_wddx_packet_end - */ -void php_wddx_packet_end(wddx_packet *packet) -{ - php_wddx_add_chunk_static(packet, WDDX_DATA_E); - php_wddx_add_chunk_static(packet, WDDX_PACKET_E); -} -/* }}} */ - -#define FLUSH_BUF() \ - if (l > 0) { \ - php_wddx_add_chunk_ex(packet, buf, l); \ - l = 0; \ - } - -/* {{{ php_wddx_serialize_string - */ -static void php_wddx_serialize_string(wddx_packet *packet, zval *var TSRMLS_DC) -{ - php_wddx_add_chunk_static(packet, WDDX_STRING_S); - - if (Z_STRLEN_P(var) > 0) { - char *buf, *enc; - int buf_len, enc_len; - - buf = php_escape_html_entities(Z_STRVAL_P(var), Z_STRLEN_P(var), &buf_len, 0, ENT_QUOTES, NULL TSRMLS_CC); - enc = xml_utf8_encode(buf, buf_len, &enc_len, "ISO-8859-1"); - - php_wddx_add_chunk_ex(packet, enc, enc_len); - - efree(buf); - efree(enc); - } - php_wddx_add_chunk_static(packet, WDDX_STRING_E); -} -/* }}} */ - -/* {{{ php_wddx_serialize_number - */ -static void php_wddx_serialize_number(wddx_packet *packet, zval *var) -{ - char tmp_buf[WDDX_BUF_LEN]; - zval tmp; - - tmp = *var; - zval_copy_ctor(&tmp); - convert_to_string(&tmp); - snprintf(tmp_buf, sizeof(tmp_buf), WDDX_NUMBER, Z_STRVAL(tmp)); - zval_dtor(&tmp); - - php_wddx_add_chunk(packet, tmp_buf); -} -/* }}} */ - -/* {{{ php_wddx_serialize_boolean - */ -static void php_wddx_serialize_boolean(wddx_packet *packet, zval *var) -{ - char tmp_buf[WDDX_BUF_LEN]; - - sprintf(tmp_buf, WDDX_BOOLEAN, Z_LVAL_P(var) ? "true" : "false"); - php_wddx_add_chunk(packet, tmp_buf); -} -/* }}} */ - -/* {{{ php_wddx_serialize_unset - */ -static void php_wddx_serialize_unset(wddx_packet *packet) -{ - php_wddx_add_chunk_static(packet, WDDX_NULL); -} -/* }}} */ - -/* {{{ php_wddx_serialize_object - */ -static void php_wddx_serialize_object(wddx_packet *packet, zval *obj) -{ -/* OBJECTS_FIXME */ - zval **ent, *fname, **varname; - zval *retval = NULL; - char *key; - ulong idx; - char tmp_buf[WDDX_BUF_LEN]; - TSRMLS_FETCH(); - - MAKE_STD_ZVAL(fname); - ZVAL_STRING(fname, "__sleep", 1); - - /* - * We try to call __sleep() method on object. It's supposed to return an - * 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 && HASH_OF(retval)) { - PHP_CLASS_ATTRIBUTES; - - PHP_SET_CLASS_ATTRIBUTES(obj); - - php_wddx_add_chunk_static(packet, WDDX_STRUCT_S); - sprintf(tmp_buf, WDDX_VAR_S, PHP_CLASS_NAME_VAR); - php_wddx_add_chunk(packet, tmp_buf); - php_wddx_add_chunk_static(packet, WDDX_STRING_S); - php_wddx_add_chunk_ex(packet, class_name, name_len); - php_wddx_add_chunk_static(packet, WDDX_STRING_E); - php_wddx_add_chunk_static(packet, WDDX_VAR_E); - - PHP_CLEANUP_CLASS_ATTRIBUTES(); - - for (zend_hash_internal_pointer_reset(HASH_OF(retval)); - zend_hash_get_current_data(HASH_OF(retval), (void **)&varname) == SUCCESS; - zend_hash_move_forward(HASH_OF(retval))) { - 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; - } - - 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), Z_STRLEN_PP(varname) TSRMLS_CC); - } - } - - php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); - } - } else { - uint key_len; - - PHP_CLASS_ATTRIBUTES; - - PHP_SET_CLASS_ATTRIBUTES(obj); - - php_wddx_add_chunk_static(packet, WDDX_STRUCT_S); - sprintf(tmp_buf, WDDX_VAR_S, PHP_CLASS_NAME_VAR); - php_wddx_add_chunk(packet, tmp_buf); - php_wddx_add_chunk_static(packet, WDDX_STRING_S); - php_wddx_add_chunk_ex(packet, class_name, name_len); - php_wddx_add_chunk_static(packet, WDDX_STRING_E); - php_wddx_add_chunk_static(packet, WDDX_VAR_E); - - PHP_CLEANUP_CLASS_ATTRIBUTES(); - - for (zend_hash_internal_pointer_reset(HASH_OF(obj)); - zend_hash_get_current_data(HASH_OF(obj), (void**)&ent) == SUCCESS; - zend_hash_move_forward(HASH_OF(obj))) { - if (*ent == obj) - continue; - - if (zend_hash_get_current_key_ex(HASH_OF(obj), &key, &key_len, &idx, 0, NULL) == HASH_KEY_IS_STRING) { - char *class_name, *prop_name; - - zend_unmangle_property_name(key, key_len-1, &class_name, &prop_name); - php_wddx_serialize_var(packet, *ent, prop_name, strlen(prop_name)+1 TSRMLS_CC); - } else { - key_len = sprintf(tmp_buf, "%ld", idx); - php_wddx_serialize_var(packet, *ent, tmp_buf, key_len TSRMLS_CC); - } - } - php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); - } - - zval_dtor(fname); - FREE_ZVAL(fname); - - if (retval) { - zval_ptr_dtor(&retval); - } -} -/* }}} */ - -/* {{{ php_wddx_serialize_array - */ -static void php_wddx_serialize_array(wddx_packet *packet, zval *arr) -{ - zval **ent; - char *key; - uint key_len; - int is_struct = 0, ent_type; - ulong idx; - HashTable *target_hash; - char tmp_buf[WDDX_BUF_LEN]; - ulong ind = 0; - int type; - TSRMLS_FETCH(); - - target_hash = HASH_OF(arr); - - for (zend_hash_internal_pointer_reset(target_hash); - zend_hash_get_current_data(target_hash, (void**)&ent) == SUCCESS; - zend_hash_move_forward(target_hash)) { - - type = zend_hash_get_current_key(target_hash, &key, &idx, 0); - - if (type == HASH_KEY_IS_STRING) { - is_struct = 1; - break; - } - - if (idx != ind) { - is_struct = 1; - break; - } - - ind++; - } - - if (is_struct) { - php_wddx_add_chunk_static(packet, WDDX_STRUCT_S); - } else { - sprintf(tmp_buf, WDDX_ARRAY_S, zend_hash_num_elements(target_hash)); - php_wddx_add_chunk(packet, tmp_buf); - } - - for (zend_hash_internal_pointer_reset(target_hash); - zend_hash_get_current_data(target_hash, (void**)&ent) == SUCCESS; - zend_hash_move_forward(target_hash)) { - if (*ent == arr) - continue; - - if (is_struct) { - 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, key_len TSRMLS_CC); - } else { - key_len = sprintf(tmp_buf, "%ld", idx); - php_wddx_serialize_var(packet, *ent, tmp_buf, key_len TSRMLS_CC); - } - } else - php_wddx_serialize_var(packet, *ent, NULL, 0 TSRMLS_CC); - } - - if (is_struct) { - php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); - } else { - php_wddx_add_chunk_static(packet, WDDX_ARRAY_E); - } -} -/* }}} */ - -/* {{{ php_wddx_serialize_var - */ -void php_wddx_serialize_var(wddx_packet *packet, zval *var, char *name, int name_len TSRMLS_DC) -{ - char *tmp_buf; - char *name_esc; - int name_esc_len; - HashTable *ht; - - if (name) { - name_esc = php_escape_html_entities(name, name_len, &name_esc_len, 0, ENT_QUOTES, NULL TSRMLS_CC); - tmp_buf = emalloc(name_esc_len + sizeof(WDDX_VAR_S)); - snprintf(tmp_buf, name_esc_len + sizeof(WDDX_VAR_S), WDDX_VAR_S, name_esc); - php_wddx_add_chunk(packet, tmp_buf); - efree(tmp_buf); - efree(name_esc); - } - - switch(Z_TYPE_P(var)) { - case IS_STRING: - php_wddx_serialize_string(packet, var TSRMLS_CC); - break; - - case IS_LONG: - case IS_DOUBLE: - php_wddx_serialize_number(packet, var); - break; - - case IS_BOOL: - php_wddx_serialize_boolean(packet, var); - break; - - case IS_NULL: - php_wddx_serialize_unset(packet); - break; - - case IS_ARRAY: - ht = Z_ARRVAL_P(var); - if (ht->nApplyCount > 1) { - php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "WDDX doesn't support circular references"); - return; - } - ht->nApplyCount++; - php_wddx_serialize_array(packet, var); - ht->nApplyCount--; - break; - - case IS_OBJECT: - ht = Z_OBJPROP_P(var); - if (ht->nApplyCount > 1) { - php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "WDDX doesn't support circular references"); - return; - } - ht->nApplyCount++; - php_wddx_serialize_object(packet, var); - ht->nApplyCount--; - break; - } - - if (name) { - php_wddx_add_chunk_static(packet, WDDX_VAR_E); - } -} -/* }}} */ - -/* {{{ php_wddx_add_var - */ -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 (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), Z_STRLEN_P(name_var) TSRMLS_CC); - } - } - else if (Z_TYPE_P(name_var) == IS_ARRAY || Z_TYPE_P(name_var) == IS_OBJECT) - { - target_hash = HASH_OF(name_var); - - zend_hash_internal_pointer_reset(target_hash); - - while(zend_hash_get_current_data(target_hash, (void**)&val) == SUCCESS) { - php_wddx_add_var(packet, *val); - - zend_hash_move_forward(target_hash); - } - } -} -/* }}} */ - -/* {{{ php_wddx_push_element - */ -static void php_wddx_push_element(void *user_data, const XML_Char *name, const XML_Char **atts) -{ - st_entry ent; - wddx_stack *stack = (wddx_stack *)user_data; - - if (!strcmp(name, EL_PACKET)) { - int i; - - if (atts) for (i=0; atts[i]; i++) { - if (!strcmp(atts[i], EL_VERSION)) { - /* nothing for now */ - } - } - } else if (!strcmp(name, EL_STRING)) { - ent.type = ST_STRING; - SET_STACK_VARNAME; - - ALLOC_ZVAL(ent.data); - INIT_PZVAL(ent.data); - Z_TYPE_P(ent.data) = IS_STRING; - Z_STRVAL_P(ent.data) = STR_EMPTY_ALLOC(); - Z_STRLEN_P(ent.data) = 0; - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - } else if (!strcmp(name, EL_BINARY)) { - ent.type = ST_BINARY; - SET_STACK_VARNAME; - - ALLOC_ZVAL(ent.data); - INIT_PZVAL(ent.data); - Z_TYPE_P(ent.data) = IS_STRING; - Z_STRVAL_P(ent.data) = STR_EMPTY_ALLOC(); - Z_STRLEN_P(ent.data) = 0; - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - } else if (!strcmp(name, EL_CHAR)) { - int i; - - if (atts) for (i = 0; atts[i]; i++) { - if (!strcmp(atts[i], EL_CHAR_CODE) && atts[++i] && atts[i][0]) { - char tmp_buf[2]; - - sprintf(tmp_buf, "%c", (char)strtol(atts[i], NULL, 16)); - php_wddx_process_data(user_data, tmp_buf, strlen(tmp_buf)); - break; - } - } - } else if (!strcmp(name, EL_NUMBER)) { - ent.type = ST_NUMBER; - SET_STACK_VARNAME; - - ALLOC_ZVAL(ent.data); - INIT_PZVAL(ent.data); - Z_TYPE_P(ent.data) = IS_LONG; - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - } else if (!strcmp(name, EL_BOOLEAN)) { - int i; - - if (atts) for (i = 0; atts[i]; i++) { - if (!strcmp(atts[i], EL_VALUE) && atts[++i] && atts[i][0]) { - ent.type = ST_BOOLEAN; - SET_STACK_VARNAME; - - ALLOC_ZVAL(ent.data); - INIT_PZVAL(ent.data); - Z_TYPE_P(ent.data) = IS_BOOL; - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - php_wddx_process_data(user_data, atts[i], strlen(atts[i])); - break; - } - } - } else if (!strcmp(name, EL_NULL)) { - ent.type = ST_NULL; - SET_STACK_VARNAME; - - ALLOC_ZVAL(ent.data); - INIT_PZVAL(ent.data); - ZVAL_NULL(ent.data); - - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - } else if (!strcmp(name, EL_ARRAY)) { - ent.type = ST_ARRAY; - SET_STACK_VARNAME; - - ALLOC_ZVAL(ent.data); - array_init(ent.data); - INIT_PZVAL(ent.data); - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - } else if (!strcmp(name, EL_STRUCT)) { - ent.type = ST_STRUCT; - SET_STACK_VARNAME; - - ALLOC_ZVAL(ent.data); - array_init(ent.data); - INIT_PZVAL(ent.data); - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - } else if (!strcmp(name, EL_VAR)) { - int i; - - if (atts) for (i = 0; atts[i]; i++) { - if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) { - char *decoded; - int decoded_len; - decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1"); - stack->varname = decoded; - break; - } - } - } else if (!strcmp(name, EL_RECORDSET)) { - int i; - - ent.type = ST_RECORDSET; - SET_STACK_VARNAME; - MAKE_STD_ZVAL(ent.data); - array_init(ent.data); - - if (atts) for (i = 0; atts[i]; i++) { - if (!strcmp(atts[i], "fieldNames") && atts[++i] && atts[i][0]) { - zval *tmp; - char *key; - char *p1, *p2, *endp; - char *decoded; - int decoded_len; - - decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1"); - endp = (char *)decoded + decoded_len; - p1 = (char *)decoded; - while ((p2 = php_memnstr(p1, ",", sizeof(",")-1, endp)) != NULL) { - key = estrndup(p1, p2 - p1); - MAKE_STD_ZVAL(tmp); - array_init(tmp); - add_assoc_zval_ex(ent.data, key, p2 - p1 + 1, tmp); - p1 = p2 + sizeof(",")-1; - efree(key); - } - - if (p1 <= endp) { - MAKE_STD_ZVAL(tmp); - array_init(tmp); - add_assoc_zval_ex(ent.data, p1, endp - p1 + 1, tmp); - } - - efree(decoded); - break; - } - } - - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - } else if (!strcmp(name, EL_FIELD)) { - int i; - st_entry ent; - - ent.type = ST_FIELD; - ent.varname = NULL; - ent.data = NULL; - - if (atts) for (i = 0; atts[i]; i++) { - if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) { - char *decoded; - int decoded_len; - st_entry *recordset; - zval **field; - - decoded = xml_utf8_decode(atts[i], strlen(atts[i]), &decoded_len, "ISO-8859-1"); - if (wddx_stack_top(stack, (void**)&recordset) == SUCCESS && - recordset->type == ST_RECORDSET && - zend_hash_find(Z_ARRVAL_P(recordset->data), decoded, decoded_len+1, (void**)&field) == SUCCESS) { - ent.data = *field; - } - - efree(decoded); - break; - } - } - - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - } else if (!strcmp(name, EL_DATETIME)) { - ent.type = ST_DATETIME; - SET_STACK_VARNAME; - - ALLOC_ZVAL(ent.data); - INIT_PZVAL(ent.data); - Z_TYPE_P(ent.data) = IS_LONG; - wddx_stack_push((wddx_stack *)stack, &ent, sizeof(st_entry)); - } -} -/* }}} */ - -/* {{{ php_wddx_pop_element - */ -static void php_wddx_pop_element(void *user_data, const XML_Char *name) -{ - st_entry *ent1, *ent2; - wddx_stack *stack = (wddx_stack *)user_data; - HashTable *target_hash; - zend_class_entry **pce; - zval *obj; - zval *tmp; - TSRMLS_FETCH(); - -/* OBJECTS_FIXME */ - if (stack->top == 0) - return; - - if (!strcmp(name, EL_STRING) || !strcmp(name, EL_NUMBER) || - !strcmp(name, EL_BOOLEAN) || !strcmp(name, EL_NULL) || - !strcmp(name, EL_ARRAY) || !strcmp(name, EL_STRUCT) || - !strcmp(name, EL_RECORDSET) || !strcmp(name, EL_BINARY) || - !strcmp(name, EL_DATETIME)) { - wddx_stack_top(stack, (void**)&ent1); - - if (!strcmp(name, EL_BINARY)) { - int new_len=0; - unsigned char *new_str; - - new_str = php_base64_decode(Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data), &new_len); - STR_FREE(Z_STRVAL_P(ent1->data)); - Z_STRVAL_P(ent1->data) = new_str; - Z_STRLEN_P(ent1->data) = new_len; - } - - /* Call __wakeup() method on the object. */ - if (Z_TYPE_P(ent1->data) == IS_OBJECT) { - zval *fname, *retval = NULL; - - MAKE_STD_ZVAL(fname); - ZVAL_STRING(fname, "__wakeup", 1); - - call_user_function_ex(NULL, &ent1->data, fname, &retval, 0, 0, 0, NULL TSRMLS_CC); - - zval_dtor(fname); - FREE_ZVAL(fname); - if (retval) - zval_ptr_dtor(&retval); - } - - if (stack->top > 1) { - stack->top--; - wddx_stack_top(stack, (void**)&ent2); - - /* if non-existent field */ - if (ent2->type == ST_FIELD && ent2->data == NULL) { - zval_ptr_dtor(&ent1->data); - efree(ent1); - return; - } - - if (Z_TYPE_P(ent2->data) == IS_ARRAY || Z_TYPE_P(ent2->data) == IS_OBJECT) { - target_hash = HASH_OF(ent2->data); - - if (ent1->varname) { - if (!strcmp(ent1->varname, PHP_CLASS_NAME_VAR) && - Z_TYPE_P(ent1->data) == IS_STRING && Z_STRLEN_P(ent1->data)) { - zend_bool incomplete_class = 0; - - zend_str_tolower(Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data)); - if (zend_hash_find(EG(class_table), Z_STRVAL_P(ent1->data), - Z_STRLEN_P(ent1->data)+1, (void **) &pce)==FAILURE) { - incomplete_class = 1; - pce = &PHP_IC_ENTRY; - } - - /* Initialize target object */ - MAKE_STD_ZVAL(obj); - object_init_ex(obj, *pce); - - /* Merge current hashtable with object's default properties */ - zend_hash_merge(Z_OBJPROP_P(obj), - Z_ARRVAL_P(ent2->data), - (void (*)(void *)) zval_add_ref, - (void *) &tmp, sizeof(zval *), 0); - - if (incomplete_class) { - php_store_class_name(obj, Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data)); - } - - /* Clean up old array entry */ - zval_ptr_dtor(&ent2->data); - - /* Set stack entry to point to the newly created object */ - ent2->data = obj; - - /* Clean up class name var entry */ - zval_ptr_dtor(&ent1->data); - } else if (Z_TYPE_P(ent2->data) == IS_OBJECT) { - zend_class_entry *old_scope = EG(scope); - - EG(scope) = Z_OBJCE_P(ent2->data); - ent1->data->refcount--; - add_property_zval(ent2->data, ent1->varname, ent1->data); - EG(scope) = old_scope; - } else { - long l; - double d; - - switch (is_numeric_string(ent1->varname, strlen(ent1->varname), &l, &d, 0)) { - case IS_DOUBLE: - if (d > INT_MAX) { - goto bigint; - } - l = (long) d; - case IS_LONG: - zend_hash_index_update(target_hash, l, &ent1->data, sizeof(zval *), NULL); - break; - default: -bigint: - zend_hash_update(target_hash,ent1->varname, strlen(ent1->varname)+1, &ent1->data, sizeof(zval *), NULL); - } - } - efree(ent1->varname); - } else { - zend_hash_next_index_insert(target_hash, - &ent1->data, - sizeof(zval *), NULL); - } - } - efree(ent1); - } else - stack->done = 1; - } else if (!strcmp(name, EL_VAR) && stack->varname) { - efree(stack->varname); - } else if (!strcmp(name, EL_FIELD)) { - st_entry *ent; - wddx_stack_top(stack, (void **)&ent); - efree(ent); - stack->top--; - } -} -/* }}} */ - -/* {{{ php_wddx_process_data - */ -static void php_wddx_process_data(void *user_data, const XML_Char *s, int len) -{ - st_entry *ent; - wddx_stack *stack = (wddx_stack *)user_data; - char *decoded; - int decoded_len; - TSRMLS_FETCH(); - - if (!wddx_stack_is_empty(stack) && !stack->done) { - wddx_stack_top(stack, (void**)&ent); - switch (Z_TYPE_P(ent)) { - case ST_STRING: - decoded = xml_utf8_decode(s, len, &decoded_len, "ISO-8859-1"); - - if (Z_STRLEN_P(ent->data) == 0) { - STR_FREE(Z_STRVAL_P(ent->data)); - Z_STRVAL_P(ent->data) = estrndup(decoded, decoded_len); - Z_STRLEN_P(ent->data) = decoded_len; - } else { - Z_STRVAL_P(ent->data) = erealloc(Z_STRVAL_P(ent->data), - Z_STRLEN_P(ent->data) + decoded_len + 1); - strncpy(Z_STRVAL_P(ent->data)+Z_STRLEN_P(ent->data), decoded, decoded_len); - Z_STRLEN_P(ent->data) += decoded_len; - Z_STRVAL_P(ent->data)[Z_STRLEN_P(ent->data)] = '\0'; - } - - efree(decoded); - break; - - case ST_BINARY: - if (Z_STRLEN_P(ent->data) == 0) { - STR_FREE(Z_STRVAL_P(ent->data)); - Z_STRVAL_P(ent->data) = estrndup(s, len + 1); - } else { - Z_STRVAL_P(ent->data) = erealloc(Z_STRVAL_P(ent->data), Z_STRLEN_P(ent->data) + len + 1); - memcpy(Z_STRVAL_P(ent->data) + Z_STRLEN_P(ent->data), s, len); - } - Z_STRLEN_P(ent->data) += len; - Z_STRVAL_P(ent->data)[Z_STRLEN_P(ent->data)] = '\0'; - break; - - case ST_NUMBER: - Z_TYPE_P(ent->data) = IS_STRING; - Z_STRLEN_P(ent->data) = len; - Z_STRVAL_P(ent->data) = estrndup(s, len); - convert_scalar_to_number(ent->data TSRMLS_CC); - break; - - case ST_BOOLEAN: - if (!strcmp(s, "true")) - Z_LVAL_P(ent->data) = 1; - else if (!strcmp(s, "false")) - Z_LVAL_P(ent->data) = 0; - else { - stack->top--; - zval_ptr_dtor(&ent->data); - if (ent->varname) - efree(ent->varname); - efree(ent); - } - break; - - case ST_DATETIME: { - char *tmp; - - tmp = emalloc(len + 1); - memcpy(tmp, s, len); - tmp[len] = '\0'; - - Z_LVAL_P(ent->data) = php_parse_date(tmp, NULL); - /* date out of range < 1969 or > 2038 */ - if (Z_LVAL_P(ent->data) == -1) { - Z_TYPE_P(ent->data) = IS_STRING; - Z_STRLEN_P(ent->data) = len; - Z_STRVAL_P(ent->data) = estrndup(s, len); - } - efree(tmp); - } - break; - - default: - break; - } - } -} -/* }}} */ - -/* {{{ php_wddx_deserialize_ex - */ -int php_wddx_deserialize_ex(char *value, int vallen, zval *return_value) -{ - wddx_stack stack; - XML_Parser parser; - st_entry *ent; - int retval; - - wddx_stack_init(&stack); - parser = XML_ParserCreate("ISO-8859-1"); - - XML_SetUserData(parser, &stack); - XML_SetElementHandler(parser, php_wddx_push_element, php_wddx_pop_element); - XML_SetCharacterDataHandler(parser, php_wddx_process_data); - - XML_Parse(parser, value, vallen, 1); - - XML_ParserFree(parser); - - if (stack.top == 1) { - wddx_stack_top(&stack, (void**)&ent); - *return_value = *(ent->data); - zval_copy_ctor(return_value); - retval = SUCCESS; - } else - retval = FAILURE; - - wddx_stack_destroy(&stack); - - return retval; -} -/* }}} */ - -/* {{{ proto string wddx_serialize_value(mixed var [, string comment]) - Creates a new packet and serializes the given value */ -PHP_FUNCTION(wddx_serialize_value) -{ - zval *var; - char *comment = NULL; - int comment_len = 0; - wddx_packet *packet; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", - &var, &comment, &comment_len) == FAILURE) - return; - - packet = php_wddx_constructor(); - - php_wddx_packet_start(packet, comment, comment_len); - php_wddx_serialize_var(packet, var, NULL, 0 TSRMLS_CC); - php_wddx_packet_end(packet); - - ZVAL_STRINGL(return_value, packet->c, packet->len, 1); - smart_str_free(packet); - efree(packet); -} -/* }}} */ - -/* {{{ proto string wddx_serialize_vars(mixed var_name [, mixed ...]) - Creates a new packet and serializes given variables into a struct */ -PHP_FUNCTION(wddx_serialize_vars) -{ - int argc, i; - wddx_packet *packet; - zval ***args; - - argc = ZEND_NUM_ARGS(); - if (argc < 1) { - WRONG_PARAM_COUNT; - } - - /* Allocate arguments array and get the arguments, checking for errors. */ - args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0); - if (zend_get_parameters_array_ex(argc, args) == FAILURE) { - efree(args); - WRONG_PARAM_COUNT; - } - - packet = php_wddx_constructor(); - - php_wddx_packet_start(packet, NULL, 0); - php_wddx_add_chunk_static(packet, WDDX_STRUCT_S); - - for (i=0; i<argc; i++) { - if (Z_TYPE_PP(args[i]) != IS_ARRAY && Z_TYPE_PP(args[i]) != IS_OBJECT) - convert_to_string_ex(args[i]); - php_wddx_add_var(packet, *args[i]); - } - - php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); - php_wddx_packet_end(packet); - - efree(args); - - ZVAL_STRINGL(return_value, packet->c, packet->len, 1); - smart_str_free(packet); - efree(packet); -} -/* }}} */ - -/* {{{ php_wddx_constructor - */ -wddx_packet *php_wddx_constructor(void) -{ - smart_str *packet; - - packet = (smart_str *)emalloc(sizeof(smart_str)); - packet->c = NULL; - - return packet; -} -/* }}} */ - -/* {{{ php_wddx_destructor - */ -void php_wddx_destructor(wddx_packet *packet) -{ - smart_str_free(packet); - efree(packet); -} -/* }}} */ - -/* {{{ proto int wddx_packet_start([string comment]) - Starts a WDDX packet with optional comment and returns the packet id */ -PHP_FUNCTION(wddx_packet_start) -{ - char *comment = NULL; - int comment_len = 0; - wddx_packet *packet; - - comment = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &comment, &comment_len) == FAILURE) - return; - - packet = php_wddx_constructor(); - - php_wddx_packet_start(packet, comment, comment_len); - php_wddx_add_chunk_static(packet, WDDX_STRUCT_S); - - ZEND_REGISTER_RESOURCE(return_value, packet, le_wddx); -} -/* }}} */ - -/* {{{ proto string wddx_packet_end(int packet_id) - Ends specified WDDX packet and returns the string containing the packet */ -PHP_FUNCTION(wddx_packet_end) -{ - zval *packet_id; - wddx_packet *packet = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &packet_id) == FAILURE) - return; - - ZEND_FETCH_RESOURCE(packet, wddx_packet *, &packet_id, -1, "WDDX packet ID", le_wddx); - - php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); - - php_wddx_packet_end(packet); - - ZVAL_STRINGL(return_value, packet->c, packet->len, 1); - - zend_list_delete(Z_LVAL_P(packet_id)); -} -/* }}} */ - -/* {{{ proto int wddx_add_vars(int packet_id, mixed var_names [, mixed ...]) - Serializes given variables and adds them to packet given by packet_id */ -PHP_FUNCTION(wddx_add_vars) -{ - int argc, i; - zval ***args; - zval **packet_id; - wddx_packet *packet = NULL; - - argc = ZEND_NUM_ARGS(); - if (argc < 2) { - WRONG_PARAM_COUNT; - } - - /* Allocate arguments array and get the arguments, checking for errors. */ - args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0); - if (zend_get_parameters_array_ex(argc, args) == FAILURE) { - efree(args); - WRONG_PARAM_COUNT; - } - - packet_id = args[0]; - - packet = (wddx_packet *)zend_fetch_resource(packet_id TSRMLS_CC, -1, "WDDX packet ID", NULL, 1, le_wddx); - if (!packet) - { - efree(args); - RETURN_FALSE; - } - - for (i=1; i<argc; i++) { - if (Z_TYPE_PP(args[i]) != IS_ARRAY && Z_TYPE_PP(args[i]) != IS_OBJECT) - convert_to_string_ex(args[i]); - php_wddx_add_var(packet, (*args[i])); - } - - efree(args); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto mixed wddx_deserialize(mixed packet) - Deserializes given packet and returns a PHP value */ -PHP_FUNCTION(wddx_deserialize) -{ - zval *packet; - char *payload; - int payload_len; - php_stream *stream = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &packet) == FAILURE) - return; - - if (Z_TYPE_P(packet) == IS_STRING) { - payload = Z_STRVAL_P(packet); - payload_len = Z_STRLEN_P(packet); - } - else if (Z_TYPE_P(packet) == IS_RESOURCE) { - php_stream_from_zval(stream, &packet); - if (stream) { - payload_len = php_stream_copy_to_mem(stream, &payload, PHP_STREAM_COPY_ALL, 0); - } - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expecting parameter 1 to be a string or a stream"); - return; - } - - if (payload_len == 0) - return; - - php_wddx_deserialize_ex(payload, payload_len, return_value); - - if (stream) - pefree(payload, 0); -} -/* }}} */ - -#endif /* HAVE_LIBEXPAT */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ |