diff options
author | Hieu Le <letrunghieu.cse09@gmail.com> | 2016-02-03 13:20:30 +0700 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2016-02-04 11:44:56 +0100 |
commit | ace71b4c5feb986dd6a4a231bd738d83b41826ab (patch) | |
tree | 17754e3f5ba716450a0d15f5b86416e71754fb66 /ext/xmlrpc | |
parent | cdf99ffc6959c7038ce49ea5bf6e364c83cefd40 (diff) | |
download | php-git-ace71b4c5feb986dd6a4a231bd738d83b41826ab.tar.gz |
Fix bug #71501
Diffstat (limited to 'ext/xmlrpc')
-rw-r--r-- | ext/xmlrpc/tests/bug71501.phpt | 23 | ||||
-rw-r--r-- | ext/xmlrpc/xmlrpc-epi-php.c | 71 |
2 files changed, 59 insertions, 35 deletions
diff --git a/ext/xmlrpc/tests/bug71501.phpt b/ext/xmlrpc/tests/bug71501.phpt new file mode 100644 index 0000000000..950d21d6d4 --- /dev/null +++ b/ext/xmlrpc/tests/bug71501.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug #71501 (xmlrpc_encode_request ignores encoding option) +--SKIPIF-- +<?php +if (!extension_loaded("xmlrpc")) print "skip"; +?> +--FILE-- +<?php +$params = 'Lê Trung Hiếu'; +echo xmlrpc_encode_request('foo', $params, ['encoding' => 'UTF-8', 'escaping' => 'markup']); +?> +--EXPECTF-- +<?xml version="1.0" encoding="UTF-8"?> +<methodCall> +<methodName>foo</methodName> +<params> + <param> + <value> + <string>Lê Trung Hiếu</string> + </value> + </param> +</params> +</methodCall> diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c index dd39047bf0..ea62bdc9a9 100644 --- a/ext/xmlrpc/xmlrpc-epi-php.c +++ b/ext/xmlrpc/xmlrpc-epi-php.c @@ -411,45 +411,46 @@ static void set_output_options(php_output_options* options, zval* output_opts) } } - /* encoding code set */ - if ((val = zend_hash_str_find(Z_ARRVAL_P(output_opts), ENCODING_KEY, ENCODING_KEY_LEN)) != NULL) { - if (Z_TYPE_P(val) == IS_STRING) { - options->xmlrpc_out.xml_elem_opts.encoding = estrdup(Z_STRVAL_P(val)); - } + } + + /* encoding code set */ + if ((val = zend_hash_str_find(Z_ARRVAL_P(output_opts), ENCODING_KEY, ENCODING_KEY_LEN)) != NULL) { + if (Z_TYPE_P(val) == IS_STRING) { + options->xmlrpc_out.xml_elem_opts.encoding = estrdup(Z_STRVAL_P(val)); } + } - /* escaping options */ - if ((val = zend_hash_str_find(Z_ARRVAL_P(output_opts), ESCAPING_KEY, ESCAPING_KEY_LEN)) != NULL) { - /* multiple values allowed. check if array */ - if (Z_TYPE_P(val) == IS_ARRAY) { - zval* iter_val; - - options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_no_escaping; - - ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(val), iter_val) { - if (Z_TYPE_P(iter_val) == IS_STRING && Z_STRVAL_P(iter_val)) { - if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_CDATA)) { - options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_cdata_escaping; - } else if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_NON_ASCII)) { - options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_ascii_escaping; - } else if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_NON_PRINT)) { - options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_print_escaping; - } else if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_MARKUP)) { - options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_markup_escaping; - } + /* escaping options */ + if ((val = zend_hash_str_find(Z_ARRVAL_P(output_opts), ESCAPING_KEY, ESCAPING_KEY_LEN)) != NULL) { + /* multiple values allowed. check if array */ + if (Z_TYPE_P(val) == IS_ARRAY) { + zval* iter_val; + + options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_no_escaping; + + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(val), iter_val) { + if (Z_TYPE_P(iter_val) == IS_STRING && Z_STRVAL_P(iter_val)) { + if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_CDATA)) { + options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_cdata_escaping; + } else if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_NON_ASCII)) { + options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_ascii_escaping; + } else if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_NON_PRINT)) { + options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_print_escaping; + } else if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_MARKUP)) { + options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_markup_escaping; } - } ZEND_HASH_FOREACH_END(); - /* else, check for single value */ - } else if (Z_TYPE_P(val) == IS_STRING) { - if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_CDATA)) { - options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_cdata_escaping; - } else if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_NON_ASCII)) { - options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_ascii_escaping; - } else if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_NON_PRINT)) { - options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_print_escaping; - } else if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_MARKUP)) { - options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping; } + } ZEND_HASH_FOREACH_END(); + /* else, check for single value */ + } else if (Z_TYPE_P(val) == IS_STRING) { + if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_CDATA)) { + options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_cdata_escaping; + } else if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_NON_ASCII)) { + options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_ascii_escaping; + } else if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_NON_PRINT)) { + options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_print_escaping; + } else if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_MARKUP)) { + options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping; } } } |