diff --git a/osquery/core/conversions.cpp b/osquery/core/conversions.cpp index 5a44aacbe92..7622cb05182 100644 --- a/osquery/core/conversions.cpp +++ b/osquery/core/conversions.cpp @@ -235,11 +235,11 @@ Status JSON::fromString(const std::string& str) { if (!pr) { std::string message{"Cannot parse JSON: "}; message += GetParseError_En(pr.Code()); - message += "Offset: "; - message += pr.Offset(); + message += " Offset: "; + message += std::to_string(pr.Offset()); return Status(1, message); } - return Status{0}; + return Status(); } void JSON::mergeObject(rj::Value& target_obj, rj::Value& source_obj) { diff --git a/osquery/core/tests/conversions_tests.cpp b/osquery/core/tests/conversions_tests.cpp index 3cbe7a5ccae..4bf84ef7d8b 100644 --- a/osquery/core/tests/conversions_tests.cpp +++ b/osquery/core/tests/conversions_tests.cpp @@ -156,6 +156,14 @@ TEST_F(ConversionsTests, test_json_from_string) { EXPECT_FALSE(doc.fromString(json).ok()); } +TEST_F(ConversionsTests, test_json_from_string_error) { + std::string json = "{\"key\":\"value\",\"key2\":{\"key3\":'error'}}"; + auto doc = JSON::newObject(); + auto s = doc.fromString(json); + EXPECT_FALSE(s.ok()); + EXPECT_EQ(s.getMessage(), "Cannot parse JSON: Invalid value. Offset: 30"); +} + TEST_F(ConversionsTests, test_json_add_object) { std::string json = "{\"key\":\"value\", \"key2\":{\"key3\":[3,2,1]}}"; auto doc = JSON::newObject();