Created
January 9, 2014 11:06
-
-
Save narfbg/8332575 to your computer and use it in GitHub Desktop.
Fix for issue #2737
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/system/libraries/Xmlrpc.php b/system/libraries/Xmlrpc.php | |
index 2fd1259..2a38dfd 100644 | |
--- a/system/libraries/Xmlrpc.php | |
+++ b/system/libraries/Xmlrpc.php | |
@@ -1113,15 +1113,15 @@ class XML_RPC_Message extends CI_Xmlrpc | |
//------------------------------------- | |
$parser = xml_parser_create($this->xmlrpc_defencoding); | |
- | |
- $this->xh[$parser] = array( | |
- 'isf' => 0, | |
- 'ac' => '', | |
- 'headers' => array(), | |
- 'stack' => array(), | |
- 'valuestack' => array(), | |
- 'isf_reason' => 0 | |
- ); | |
+ $pname = (string) $parser; | |
+ $this->xh[$pname] = array( | |
+ 'isf' => 0, | |
+ 'ac' => '', | |
+ 'headers' => array(), | |
+ 'stack' => array(), | |
+ 'valuestack' => array(), | |
+ 'isf_reason' => 0 | |
+ ); | |
xml_set_object($parser, $this); | |
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, TRUE); | |
@@ -1137,7 +1137,7 @@ class XML_RPC_Message extends CI_Xmlrpc | |
{ | |
break; | |
} | |
- $this->xh[$parser]['headers'][] = $line; | |
+ $this->xh[$pname]['headers'][] = $line; | |
} | |
$data = implode("\r\n", $lines); | |
@@ -1155,18 +1155,18 @@ class XML_RPC_Message extends CI_Xmlrpc | |
xml_parser_free($parser); | |
// Got ourselves some badness, it seems | |
- if ($this->xh[$parser]['isf'] > 1) | |
+ if ($this->xh[$pname]['isf'] > 1) | |
{ | |
if ($this->debug === TRUE) | |
{ | |
- echo "---Invalid Return---\n".$this->xh[$parser]['isf_reason']."---Invalid Return---\n\n"; | |
+ echo "---Invalid Return---\n".$this->xh[$pname]['isf_reason']."---Invalid Return---\n\n"; | |
} | |
- return new XML_RPC_Response(0, $this->xmlrpcerr['invalid_return'], $this->xmlrpcstr['invalid_return'].' '.$this->xh[$parser]['isf_reason']); | |
+ return new XML_RPC_Response(0, $this->xmlrpcerr['invalid_return'], $this->xmlrpcstr['invalid_return'].' '.$this->xh[$pname]['isf_reason']); | |
} | |
- elseif ( ! is_object($this->xh[$parser]['value'])) | |
+ elseif ( ! is_object($this->xh[$pname]['value'])) | |
{ | |
- return new XML_RPC_Response(0, $this->xmlrpcerr['invalid_return'], $this->xmlrpcstr['invalid_return'].' '.$this->xh[$parser]['isf_reason']); | |
+ return new XML_RPC_Response(0, $this->xmlrpcerr['invalid_return'], $this->xmlrpcstr['invalid_return'].' '.$this->xh[$pname]['isf_reason']); | |
} | |
// Display XML content for debugging | |
@@ -1174,10 +1174,10 @@ class XML_RPC_Message extends CI_Xmlrpc | |
{ | |
echo '<pre>'; | |
- if (count($this->xh[$parser]['headers'] > 0)) | |
+ if (count($this->xh[$pname]['headers'] > 0)) | |
{ | |
echo "---HEADERS---\n"; | |
- foreach ($this->xh[$parser]['headers'] as $header) | |
+ foreach ($this->xh[$pname]['headers'] as $header) | |
{ | |
echo $header."\n"; | |
} | |
@@ -1185,13 +1185,13 @@ class XML_RPC_Message extends CI_Xmlrpc | |
} | |
echo "---DATA---\n".htmlspecialchars($data)."\n---END DATA---\n\n---PARSED---\n"; | |
- var_dump($this->xh[$parser]['value']); | |
+ var_dump($this->xh[$pname]['value']); | |
echo "\n---END PARSED---</pre>"; | |
} | |
// Send response | |
- $v = $this->xh[$parser]['value']; | |
- if ($this->xh[$parser]['isf']) | |
+ $v = $this->xh[$pname]['value']; | |
+ if ($this->xh[$pname]['isf']) | |
{ | |
$errno_v = $v->me['struct']['faultCode']; | |
$errstr_v = $v->me['struct']['faultString']; | |
@@ -1210,7 +1210,7 @@ class XML_RPC_Message extends CI_Xmlrpc | |
$r = new XML_RPC_Response($v); | |
} | |
- $r->headers = $this->xh[$parser]['headers']; | |
+ $r->headers = $this->xh[$pname]['headers']; | |
return $r; | |
} | |
@@ -1241,6 +1241,8 @@ class XML_RPC_Message extends CI_Xmlrpc | |
*/ | |
public function open_tag($the_parser, $name) | |
{ | |
+ $the_parser = (string) $the_parser; | |
+ | |
// If invalid nesting, then return | |
if ($this->xh[$the_parser]['isf'] > 1) return; | |
@@ -1340,6 +1342,8 @@ class XML_RPC_Message extends CI_Xmlrpc | |
*/ | |
public function closing_tag($the_parser, $name) | |
{ | |
+ $the_parser = (string) $the_parser; | |
+ | |
if ($this->xh[$the_parser]['isf'] > 1) return; | |
// Remove current element from stack and set variable | |
@@ -1472,6 +1476,8 @@ class XML_RPC_Message extends CI_Xmlrpc | |
*/ | |
public function character_data($the_parser, $data) | |
{ | |
+ $the_parser = (string) $the_parser; | |
+ | |
if ($this->xh[$the_parser]['isf'] > 1) return; // XML Fault found already | |
// If a value has not been found |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment