@@ -1118,29 +1118,27 @@ static xmlNodePtr to_xml_double(encodeTypePtr type, zval *data, int style, xmlNo
11181118
11191119static zval * to_zval_bool (zval * ret , encodeTypePtr type , xmlNodePtr data )
11201120{
1121- ZVAL_NULL (ret );
11221121 FIND_XML_NULL (data , ret );
11231122
1124- if (data && data -> children ) {
1125- if (data -> children -> type == XML_TEXT_NODE && data -> children -> next == NULL ) {
1126- whiteSpace_collapse (data -> children -> content );
1127- if (stricmp ((char * )data -> children -> content , "true" ) == 0 ||
1128- stricmp ((char * )data -> children -> content , "t" ) == 0 ||
1129- strcmp ((char * )data -> children -> content , "1" ) == 0 ) {
1130- ZVAL_TRUE (ret );
1131- } else if (stricmp ((char * )data -> children -> content , "false" ) == 0 ||
1132- stricmp ((char * )data -> children -> content , "f" ) == 0 ||
1133- strcmp ((char * )data -> children -> content , "0" ) == 0 ) {
1134- ZVAL_FALSE (ret );
1135- } else {
1136- ZVAL_STRING (ret , (char * )data -> children -> content );
1137- convert_to_boolean (ret );
1138- }
1139- } else {
1140- soap_error0 (E_ERROR , "Encoding: Violation of encoding rules" );
1141- }
1142- } else {
1123+ if (!data -> children ) {
11431124 ZVAL_NULL (ret );
1125+ return ret ;
1126+ }
1127+ if (data -> children -> type != XML_TEXT_NODE || data -> children -> next != NULL ) {
1128+ // TODO Convert to exception?
1129+ soap_error0 (E_ERROR , "Encoding: Violation of encoding rules" );
1130+ }
1131+
1132+ whiteSpace_collapse (data -> children -> content );
1133+ if (
1134+ data -> children -> content [0 ] == '\0' /* Check for empty string */
1135+ || strcmp ((const char * )data -> children -> content , "0" ) == 0
1136+ || stricmp ((const char * )data -> children -> content , "f" ) == 0
1137+ || stricmp ((const char * )data -> children -> content , "false" ) == 0
1138+ ) {
1139+ ZVAL_FALSE (ret );
1140+ } else {
1141+ ZVAL_TRUE (ret );
11441142 }
11451143 return ret ;
11461144}
0 commit comments