check for valid json object before parsing 43/140343/1 accepted/tizen/4.0/unified/20170816.010826 accepted/tizen/4.0/unified/20170816.014455 accepted/tizen/unified/20170725.173908 submit/tizen/20170725.003308 submit/tizen_4.0/20170811.094300 submit/tizen_4.0/20170814.115522 submit/tizen_4.0_unified/20170814.115522
authorVarun Talwar <varun@mapzen.com>
Mon, 24 Jul 2017 22:33:25 +0000 (15:33 -0700)
committerVarun Talwar <varun@mapzen.com>
Mon, 24 Jul 2017 22:33:25 +0000 (15:33 -0700)
Change-Id: If9b6ff9f0aeb8fdd88f7d87eadcfa46245cede09

src/mapzen/mapzen_jsonparser.cpp

index 7cc3257..6293136 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "mapzen_jsonparser.hpp"
 #include "rapidjson/document.h"
+#include "rapidjson/error/error.h"
+#include "rapidjson/error/en.h"
 
 extern "C" {
 #include "mapzen_queue.h"
@@ -159,6 +161,12 @@ static void __parse_geocode_response(char *response, int size, int *status, GLis
        //crack open that json
        rapidjson::Document document;
        document.Parse(std::string(response, size).c_str());
+
+       if (document.HasParseError()) {
+               MAP_DEBUG("Error Parsing JSON Response: %s (%u)", GetParseError_En(document.GetParseError()), document.GetErrorOffset());
+               return;
+       }
+
        rapidjson::Value::ConstMemberIterator features = document.FindMember("features");
        if(features != document.MemberEnd() && features->value.IsArray()) {
                //for each feature
@@ -204,6 +212,12 @@ static void __parse_revgeocode_response(char *response, int size, int *status, m
        //crack open that json
        rapidjson::Document document;
        document.Parse(std::string(response, size).c_str());
+
+       if (document.HasParseError()) {
+               MAP_DEBUG("Error Parsing JSON Response: %s (%u)", GetParseError_En(document.GetParseError()), document.GetErrorOffset());
+               return;
+       }
+
        rapidjson::Value::ConstMemberIterator features = document.FindMember("features");
        if(features != document.MemberEnd() && features->value.IsArray()) {
                //for each feature
@@ -268,6 +282,12 @@ static void __parse_place_response(char *response, int size, GList **placeList)
        //crack open that json
        rapidjson::Document document;
        document.Parse(std::string(response, size).c_str());
+
+       if (document.HasParseError()) {
+               MAP_DEBUG("Error Parsing JSON Response: %s (%u)", GetParseError_En(document.GetParseError()), document.GetErrorOffset());
+               return;
+       }
+
        rapidjson::Value::ConstMemberIterator features = document.FindMember("features");
        if(features != document.MemberEnd() && features->value.IsArray()) {
                //for each feature
@@ -520,6 +540,12 @@ static void __parse_route_response(char *response, int size, int *status, mapzen
 
        rapidjson::Document document;
        document.Parse(std::string(response, size).c_str());
+
+       if (document.HasParseError()) {
+               MAP_DEBUG("Error Parsing JSON Response: %s (%u)", GetParseError_En(document.GetParseError()), document.GetErrorOffset());
+               return;
+       }
+
        rapidjson::Value::MemberIterator trip = document.FindMember("trip");
        if (trip == document.MemberEnd()) {
                MAP_DEBUG(">>>>> PROCESS __parse_route_response: trip object not found in response");