forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-02-19 1c055e55a242a33e574e48be530e06770a210dcd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Description: TinyXML incorrectly encodes text element containing
 an ampersand followed by either x or #.
 
Origin: http://sourceforge.net/tracker/index.php?func=detail&aid=3031828&group_id=13559&atid=313559
 
Upstream-Status: Pending
 
diff -u -r1.105 tinyxml.cpp
--- a/tinyxml.cpp
+++ b/tinyxml.cpp
@@ -57,30 +57,7 @@
     {
         unsigned char c = (unsigned char) str[i];
 
-        if (    c == '&' 
-             && i < ( (int)str.length() - 2 )
-             && str[i+1] == '#'
-             && str[i+2] == 'x' )
-        {
-            // Hexadecimal character reference.
-            // Pass through unchanged.
-            // &#xA9;    -- copyright symbol, for example.
-            //
-            // The -1 is a bug fix from Rob Laveaux. It keeps
-            // an overflow from happening if there is no ';'.
-            // There are actually 2 ways to exit this loop -
-            // while fails (error case) and break (semicolon found).
-            // However, there is no mechanism (currently) for
-            // this function to return an error.
-            while ( i<(int)str.length()-1 )
-            {
-                outString->append( str.c_str() + i, 1 );
-                ++i;
-                if ( str[i] == ';' )
-                    break;
-            }
-        }
-        else if ( c == '&' )
+        if ( c == '&' )
         {
             outString->append( entity[0].str, entity[0].strLength );
             ++i;
diff -u -r1.89 xmltest.cpp
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -1340,6 +1340,16 @@
         }*/
     }
 
+    #ifdef TIXML_USE_STL
+    {
+        TiXmlDocument xml;
+        xml.Parse("<foo>foo&amp;#xa+bar</foo>");
+        std::string str;
+        str << xml;
+        XmlTest( "Entity escaping", "<foo>foo&amp;#xa+bar</foo>", str.c_str() );
+    }
+    #endif
+
     /*  1417717 experiment
     {
         TiXmlDocument xml;