$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r72000 - in trunk: boost/property_tree/detail libs/property_tree/test
From: sebastian.redl_at_[hidden]
Date: 2011-05-16 16:58:02
Author: cornedbee
Date: 2011-05-16 16:58:01 EDT (Mon, 16 May 2011)
New Revision: 72000
URL: http://svn.boost.org/trac/boost/changeset/72000
Log:
Make PTree XML writer escape attribute values.
Text files modified: 
   trunk/boost/property_tree/detail/xml_parser_write.hpp    |     7 +++++--                                 
   trunk/libs/property_tree/test/test_xml_parser_common.hpp |     7 +++++++                                 
   trunk/libs/property_tree/test/xml_parser_test_data.hpp   |     5 +++++                                   
   3 files changed, 17 insertions(+), 2 deletions(-)
Modified: trunk/boost/property_tree/detail/xml_parser_write.hpp
==============================================================================
--- trunk/boost/property_tree/detail/xml_parser_write.hpp	(original)
+++ trunk/boost/property_tree/detail/xml_parser_write.hpp	2011-05-16 16:58:01 EDT (Mon, 16 May 2011)
@@ -115,8 +115,11 @@
                 // Write attributes
                 if (optional<const Ptree &> attribs = pt.get_child_optional(xmlattr<Ch>()))
                     for (It it = attribs.get().begin(); it != attribs.get().end(); ++it)
-                        stream << Ch(' ') << it->first << Ch('=') << 
-                                  Ch('"') << it->second.template get_value<std::basic_string<Ch> >() << Ch('"');
+                        stream << Ch(' ') << it->first << Ch('=')
+                               << Ch('"')
+                               << encode_char_entities(
+                                    it->second.template get_value<std::basic_string<Ch> >())
+                               << Ch('"');
 
                 if ( has_attrs_only )
                 {
Modified: trunk/libs/property_tree/test/test_xml_parser_common.hpp
==============================================================================
--- trunk/libs/property_tree/test/test_xml_parser_common.hpp	(original)
+++ trunk/libs/property_tree/test/test_xml_parser_common.hpp	2011-05-16 16:58:01 EDT (Mon, 16 May 2011)
@@ -139,6 +139,13 @@
         3, 4 * umlautsize<char_type>(), 13
     );
 
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), bug_data_pr4840, NULL,
+        "testpr4840.xml", NULL, "testpr4840out.xml",
+        4, 13, 15
+    );
+
 }
 
 #endif
Modified: trunk/libs/property_tree/test/xml_parser_test_data.hpp
==============================================================================
--- trunk/libs/property_tree/test/xml_parser_test_data.hpp	(original)
+++ trunk/libs/property_tree/test/xml_parser_test_data.hpp	2011-05-16 16:58:01 EDT (Mon, 16 May 2011)
@@ -773,4 +773,9 @@
     "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
     "<name>\xD0\xAE\xD0\xBD\xD0\xB8\xD1\x82</name>";
 
+// Quoting attributes
+const char *bug_data_pr4840 =
+    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+    "<start a=\"hello "world"\"/>";
+
 #endif