Util: Check strings for double quotes in Lexer
This commit is contained in:
@@ -33,6 +33,10 @@ Value Job::fire()
|
||||
Lexer lexer(this);
|
||||
lexer.analyze();
|
||||
|
||||
if (!m_success) {
|
||||
return { nullptr };
|
||||
}
|
||||
|
||||
Parser parser(this);
|
||||
Value value = parser.parse();
|
||||
|
||||
|
||||
+15
-3
@@ -59,8 +59,6 @@ void Lexer::analyze()
|
||||
break;
|
||||
case '"':
|
||||
if (!getString()) {
|
||||
// Error!
|
||||
printf("Invalid JSON!\n");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
@@ -150,8 +148,17 @@ bool Lexer::consumeSpecific(char character)
|
||||
bool Lexer::getString()
|
||||
{
|
||||
size_t column = m_column;
|
||||
std::string symbol = "";
|
||||
|
||||
auto isValidStringCharacter = [](char check) -> bool {
|
||||
std::string invalidCharacters = "{}[]:,";
|
||||
if (invalidCharacters.find(check) != std::string::npos) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
std::string symbol = "";
|
||||
char character = consume();
|
||||
for (;;) {
|
||||
character = peek();
|
||||
@@ -159,6 +166,11 @@ bool Lexer::getString()
|
||||
// TODO: Escape logic goes here
|
||||
// ", \, /, b(ackspace), f(orm feed), l(ine feed), c(arriage return), t(ab), u(nicode) \u0021
|
||||
|
||||
if (!isValidStringCharacter(character)) {
|
||||
m_tokens->push_back({ Token::Type::None, m_line, column, "" });
|
||||
m_job->printErrorLine(m_job->tokens()->back(), "strings should be wrapped in double quotes");
|
||||
return false;
|
||||
}
|
||||
if (character == '"') {
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user