Fixed infinite loop bug having to do with simple keys when we hit an unexpected EOF.

This commit is contained in:
Jesse Beder
2008-09-24 22:45:04 +00:00
parent 3ed09b89f8
commit 907be0660c
3 changed files with 11 additions and 7 deletions

View File

@@ -33,7 +33,7 @@ namespace YAML
// checking input // checking input
void InsertSimpleKey(); void InsertSimpleKey();
bool VerifySimpleKey(); bool VerifySimpleKey(bool force = false);
void VerifyAllSimpleKeys(); void VerifyAllSimpleKeys();
bool IsWhitespaceToBeEaten(char ch); bool IsWhitespaceToBeEaten(char ch);

View File

@@ -50,7 +50,8 @@ namespace YAML
// VerifySimpleKey // VerifySimpleKey
// . Determines whether the latest simple key to be added is valid, // . Determines whether the latest simple key to be added is valid,
// and if so, makes it valid. // and if so, makes it valid.
bool Scanner::VerifySimpleKey() // . If 'force' is true, then we'll pop no matter what (whether we can verify it or not).
bool Scanner::VerifySimpleKey(bool force)
{ {
m_isLastKeyValid = false; m_isLastKeyValid = false;
if(m_simpleKeys.empty()) if(m_simpleKeys.empty())
@@ -60,8 +61,11 @@ namespace YAML
SimpleKey key = m_simpleKeys.top(); SimpleKey key = m_simpleKeys.top();
// only validate if we're in the correct flow level // only validate if we're in the correct flow level
if(key.flowLevel != m_flowLevel) if(key.flowLevel != m_flowLevel) {
if(force)
m_simpleKeys.pop();
return false; return false;
}
m_simpleKeys.pop(); m_simpleKeys.pop();
@@ -94,9 +98,11 @@ namespace YAML
return isValid; return isValid;
} }
// VerifyAllSimplyKeys
// . Pops all simple keys (with checking, but if we can't verify one, then pop it anyways).
void Scanner::VerifyAllSimpleKeys() void Scanner::VerifyAllSimpleKeys()
{ {
while(!m_simpleKeys.empty()) while(!m_simpleKeys.empty())
VerifySimpleKey(); VerifySimpleKey(true);
} }
} }

View File

@@ -1,3 +1 @@
- it's just bad YAML: [
- one thing
- after another