Browse Source

JSON Parser Crash Fix

master
Intel 10 years ago
parent
commit
2911f81a18
  1. 24
      src/server/shared/JSON/JSONReader.h

24
src/server/shared/JSON/JSONReader.h

@ -5,10 +5,12 @@
#include "JSON.h" #include "JSON.h"
#include <boost/spirit/include/qi.hpp> #include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_iso8859_1.hpp>
#include <boost/function.hpp> #include <boost/function.hpp>
#include <boost/bind.hpp> #include <boost/bind.hpp>
#include <string> #include <string>
namespace iso8859_1 = boost::spirit::iso8859_1;
namespace qi = boost::spirit::qi; namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii; namespace ascii = boost::spirit::ascii;
@ -130,7 +132,7 @@ namespace JSONReader
qi::real_parser<double, strict_real_policies<double> > strict_double; qi::real_parser<double, strict_real_policies<double> > strict_double;
template<typename Iterator> template<typename Iterator>
struct Grammar : qi::grammar<Iterator, ascii::space_type> struct Grammar : qi::grammar<Iterator, iso8859_1::space_type>
{ {
Grammar(SemanticFunctions& smfunc) : _smfunc(smfunc), Grammar::base_type(json) Grammar(SemanticFunctions& smfunc) : _smfunc(smfunc), Grammar::base_type(json)
{ {
@ -162,15 +164,15 @@ namespace JSONReader
number = strict_double[NewDouble] | qi::long_long[NewInt]; number = strict_double[NewDouble] | qi::long_long[NewInt];
} }
qi::rule<Iterator, ascii::space_type> json; qi::rule<Iterator, iso8859_1::space_type> json;
qi::rule<Iterator, ascii::space_type> object; qi::rule<Iterator, iso8859_1::space_type> object;
qi::rule<Iterator, ascii::space_type> members; qi::rule<Iterator, iso8859_1::space_type> members;
qi::rule<Iterator, ascii::space_type> pair; qi::rule<Iterator, iso8859_1::space_type> pair;
qi::rule<Iterator, ascii::space_type> array; qi::rule<Iterator, iso8859_1::space_type> array;
qi::rule<Iterator, ascii::space_type> elements; qi::rule<Iterator, iso8859_1::space_type> elements;
qi::rule<Iterator, ascii::space_type> value; qi::rule<Iterator, iso8859_1::space_type> value;
qi::rule<Iterator, std::string(), ascii::space_type> string; qi::rule<Iterator, std::string(), iso8859_1::space_type> string;
qi::rule<Iterator, ascii::space_type> number; qi::rule<Iterator, iso8859_1::space_type> number;
// Functions // Functions
SemanticFunctions& _smfunc; SemanticFunctions& _smfunc;
@ -184,7 +186,7 @@ namespace JSONReader
std::string::const_iterator begin = str.begin(); std::string::const_iterator begin = str.begin();
std::string::const_iterator end = str.end(); std::string::const_iterator end = str.end();
if (!qi::phrase_parse(begin, end, g, ascii::space)) if (!qi::phrase_parse(begin, end, g, iso8859_1::space))
throw JSONException("Failed to parse JSON"); throw JSONException("Failed to parse JSON");
} }
} }

Loading…
Cancel
Save