aboutsummaryrefslogtreecommitdiffstats
path: root/json.h
diff options
context:
space:
mode:
authoripknHama <ipknhama@gmail.com>2014-04-22 03:27:53 +0900
committeripknHama <ipknhama@gmail.com>2014-04-22 03:27:53 +0900
commitdd74354a7bfc34b1c347083c4565ebbd80ff94c0 (patch)
tree5ccc34dfbf46c7ea4287c8660cb03b2dd49210b0 /json.h
parent1173eba33240071a52991f6755623a324742d0b7 (diff)
downloadcrow-dd74354a7bfc34b1c347083c4565ebbd80ff94c0.tar.gz
crow-dd74354a7bfc34b1c347083c4565ebbd80ff94c0.zip
increase test coverage of json.h
Diffstat (limited to 'json.h')
-rw-r--r--json.h22
1 files changed, 8 insertions, 14 deletions
diff --git a/json.h b/json.h
index b46bf8a..705a9bc 100644
--- a/json.h
+++ b/json.h
@@ -267,15 +267,6 @@ namespace flask
return boost::lexical_cast<double>(start_, end_-start_);
}
- detail::r_string s_raw() const
- {
-#ifndef FLASKPP_JSON_NO_ERROR_CHECK
- if (t() != type::String)
- throw std::runtime_error("value is not string");
-#endif
- return detail::r_string{start_, (uint32_t)(end_-start_), has_escaping()};
- }
-
detail::r_string s() const
{
#ifndef FLASKPP_JSON_NO_ERROR_CHECK
@@ -481,7 +472,7 @@ namespace flask
case type::False: os << "false"; break;
case type::True: os << "true"; break;
case type::Number: os << r.d(); break;
- case type::String: os << '"' << r.s_raw() << '"'; break;
+ case type::String: os << '"' << r.s() << '"'; break;
case type::List:
{
os << '[';
@@ -591,7 +582,7 @@ namespace flask
uint8_t has_escaping = 0;
while(1)
{
- if (flask_json_likely(*data != '"' && *data != '\\'))
+ if (flask_json_likely(*data != '"' && *data != '\\' && *data != '\0'))
{
data ++;
}
@@ -625,6 +616,8 @@ namespace flask
return {};
}
}
+ else
+ return {};
}
return {};
}
@@ -906,9 +899,9 @@ namespace flask
rvalue parse()
{
ws_skip();
- auto ret = decode_object(); // or decode value?
+ auto ret = decode_value(); // or decode object?
ws_skip();
- if (*data != '\0')
+ if (ret && *data != '\0')
ret.set_error();
return ret;
}
@@ -920,7 +913,8 @@ namespace flask
inline rvalue load(const char* data, size_t size)
{
char* s = new char[size+1];
- memcpy(s, data, size+1);
+ memcpy(s, data, size);
+ s[size] = 0;
auto ret = load_nocopy_internal(s, size);
if (ret)
ret.key_.force(s, size);