$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r70664 - trunk/boost/property_tree/detail
From: sebastian.redl_at_[hidden]
Date: 2011-03-28 09:32:19
Author: cornedbee
Date: 2011-03-28 09:32:19 EDT (Mon, 28 Mar 2011)
New Revision: 70664
URL: http://svn.boost.org/trac/boost/changeset/70664
Log:
Slightly improve UTF-8 support in INFO parser. Don't crash on non-ASCII sequences.
Text files modified: 
   trunk/boost/property_tree/detail/info_parser_read.hpp |    17 ++++++++++++++---                       
   1 files changed, 14 insertions(+), 3 deletions(-)
Modified: trunk/boost/property_tree/detail/info_parser_read.hpp
==============================================================================
--- trunk/boost/property_tree/detail/info_parser_read.hpp	(original)
+++ trunk/boost/property_tree/detail/info_parser_read.hpp	2011-03-28 09:32:19 EDT (Mon, 28 Mar 2011)
@@ -60,13 +60,24 @@
         }
         return result;
     }
+    
+    // Detect whitespace in a not very smart way.
+    template <class Ch>
+    bool is_ascii_space(Ch c)
+    {
+        // Everything outside ASCII is not space.
+        unsigned n = c;
+        if (n > 127)
+            return false;
+        return isspace(c);
+    }
 
     // Advance pointer past whitespace
     template<class Ch>
     void skip_whitespace(const Ch *&text)
     {
         using namespace std;
-        while (isspace(*text))
+        while (is_ascii_space(*text))
             ++text;
     }
 
@@ -77,7 +88,7 @@
         using namespace std;
         skip_whitespace(text);
         const Ch *start = text;
-        while (!isspace(*text) && *text != Ch(';') && *text != Ch('\0'))
+        while (!is_ascii_space(*text) && *text != Ch(';') && *text != Ch('\0'))
             ++text;
         return expand_escapes(start, text);
     }
@@ -91,7 +102,7 @@
         const Ch *start = text;
         while (*text != Ch('\0') && *text != Ch(';'))
             ++text;
-        while (text > start && isspace(*(text - 1)))
+        while (text > start && is_ascii_space(*(text - 1)))
             --text;
         return expand_escapes(start, text);
     }