Allowed non-quoted key to contain underscores (fixes #665)

This commit is contained in:
Benoit Blanchon
2018-02-16 11:04:07 +01:00
parent b4eece01f8
commit d9b1e7e810
4 changed files with 150 additions and 134 deletions

View File

@ -50,13 +50,13 @@ class JsonParser {
inline bool parseObjectTo(JsonVariant *destination);
inline bool parseStringTo(JsonVariant *destination);
static inline bool isInRange(char c, char min, char max) {
static inline bool isBetween(char c, char min, char max) {
return min <= c && c <= max;
}
static inline bool isLetterOrNumber(char c) {
return isInRange(c, '0', '9') || isInRange(c, 'a', 'z') ||
isInRange(c, 'A', 'Z') || c == '+' || c == '-' || c == '.';
static inline bool canBeInNonQuotedString(char c) {
return isBetween(c, '0', '9') || isBetween(c, '_', 'z') ||
isBetween(c, 'A', 'Z') || c == '+' || c == '-' || c == '.';
}
static inline bool isQuote(char c) {
@ -99,5 +99,5 @@ inline typename JsonParserBuilder<TJsonBuffer, TString>::TParser makeParser(
return JsonParserBuilder<TJsonBuffer, TString>::makeParser(buffer, json,
nestingLimit);
}
}
}
} // namespace Internals
} // namespace ArduinoJson

View File

@ -167,7 +167,7 @@ ArduinoJson::Internals::JsonParser<TReader, TWriter>::parseString() {
}
} else { // no quotes
for (;;) {
if (!isLetterOrNumber(c)) break;
if (!canBeInNonQuotedString(c)) break;
_reader.move();
str.append(c);
c = _reader.current();