summaryrefslogtreecommitdiff
path: root/ext/soap/php_encoding.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2004-09-14 12:15:30 +0000
committerDmitry Stogov <dmitry@php.net>2004-09-14 12:15:30 +0000
commitffc2278d6e6ac6d6f2c69b604cf746942c9e010e (patch)
tree4b3aaed5a07e95899af352bd4211730db17a2baf /ext/soap/php_encoding.c
parent34550382d89597552df369fe1d6318d32b5929cb (diff)
downloadphp-git-ffc2278d6e6ac6d6f2c69b604cf746942c9e010e.tar.gz
Fixed bug #30045 (Cannot pass big integers (> 2147483647) in SOAP requests)
Diffstat (limited to 'ext/soap/php_encoding.c')
-rw-r--r--ext/soap/php_encoding.c53
1 files changed, 5 insertions, 48 deletions
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c
index 72f6c73c8a..5be092d660 100644
--- a/ext/soap/php_encoding.c
+++ b/ext/soap/php_encoding.c
@@ -27,7 +27,6 @@
/* zval type decode */
static zval *to_zval_double(encodeTypePtr type, xmlNodePtr data);
static zval *to_zval_long(encodeTypePtr type, xmlNodePtr data);
-static zval *to_zval_ulong(encodeTypePtr type, xmlNodePtr data);
static zval *to_zval_bool(encodeTypePtr type, xmlNodePtr data);
static zval *to_zval_string(encodeTypePtr type, xmlNodePtr data);
static zval *to_zval_stringr(encodeTypePtr type, xmlNodePtr data);
@@ -37,7 +36,6 @@ static zval *to_zval_map(encodeTypePtr type, xmlNodePtr data);
static zval *to_zval_null(encodeTypePtr type, xmlNodePtr data);
static xmlNodePtr to_xml_long(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
-static xmlNodePtr to_xml_ulong(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
static xmlNodePtr to_xml_double(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
static xmlNodePtr to_xml_bool(encodeTypePtr type, zval *data, int style, xmlNodePtr parent);
@@ -161,7 +159,8 @@ encode defaultEncoding[] = {
{{XSD_UNSIGNEDBYTE, XSD_UNSIGNEDBYTE_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
{{XSD_UNSIGNEDSHORT, XSD_UNSIGNEDSHORT_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
{{XSD_UNSIGNEDINT, XSD_UNSIGNEDINT_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
- {{XSD_UNSIGNEDLONG, XSD_UNSIGNEDLONG_STRING, XSD_NAMESPACE, NULL}, to_zval_ulong, to_xml_ulong},
+ {{XSD_UNSIGNEDLONG, XSD_UNSIGNEDLONG_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
+ {{XSD_INTEGER, XSD_INTEGER_STRING, XSD_NAMESPACE, NULL}, to_zval_long, to_xml_long},
{{XSD_ANYTYPE, XSD_ANYTYPE_STRING, XSD_NAMESPACE, NULL}, guess_zval_convert, guess_xml_convert},
{{XSD_UR_TYPE, XSD_UR_TYPE_STRING, XSD_NAMESPACE, NULL}, guess_zval_convert, guess_xml_convert},
@@ -684,25 +683,6 @@ static zval *to_zval_long(encodeTypePtr type, xmlNodePtr data)
if (data && data->children) {
if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
whiteSpace_collapse(data->children->content);
- ZVAL_LONG(ret, atol(data->children->content));
- } else {
- soap_error0(E_ERROR, "Encoding: Violation of encoding rules");
- }
- } else {
- ZVAL_NULL(ret);
- }
- return ret;
-}
-
-static zval *to_zval_ulong(encodeTypePtr type, xmlNodePtr data)
-{
- zval *ret;
- MAKE_STD_ZVAL(ret);
- FIND_XML_NULL(data, ret);
-
- if (data && data->children) {
- if (data->children->type == XML_TEXT_NODE && data->children->next == NULL) {
- whiteSpace_collapse(data->children->content);
errno = 0;
ret->value.lval = strtol(data->children->content, NULL, 0);
if (errno == ERANGE) { /* overflow */
@@ -723,38 +703,15 @@ static zval *to_zval_ulong(encodeTypePtr type, xmlNodePtr data)
static xmlNodePtr to_xml_long(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
{
xmlNodePtr ret;
- zval tmp;
-
- ret = xmlNewNode(NULL,"BOGUS");
- xmlAddChild(parent, ret);
- FIND_ZVAL_NULL(data, ret, style);
-
- tmp = *data;
- zval_copy_ctor(&tmp);
- if (Z_TYPE(tmp) != IS_LONG) {
- convert_to_long(&tmp);
- }
- convert_to_string(&tmp);
- xmlNodeSetContentLen(ret, Z_STRVAL(tmp), Z_STRLEN(tmp));
- zval_dtor(&tmp);
-
- if (style == SOAP_ENCODED) {
- set_ns_and_type(ret, type);
- }
- return ret;
-}
-
-static xmlNodePtr to_xml_ulong(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
-{
- xmlNodePtr ret;
ret = xmlNewNode(NULL,"BOGUS");
xmlAddChild(parent, ret);
FIND_ZVAL_NULL(data, ret, style);
if (Z_TYPE_P(data) == IS_DOUBLE) {
- char s[16];
- sprintf(s, "%0.0f",Z_DVAL_P(data));
+ char s[256];
+
+ sprintf(s, "%0.0f",floor(Z_DVAL_P(data)));
xmlNodeSetContent(ret, s);
} else {
zval tmp = *data;