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

This commit is contained in:
jbeder
2008-09-24 22:45:04 +00:00
parent d51888bc7e
commit ecba08e240
3 changed files with 11 additions and 7 deletions

View File

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

View File

@@ -50,7 +50,8 @@ namespace YAML
// VerifySimpleKey
// . Determines whether the latest simple key to be added is 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;
if(m_simpleKeys.empty())
@@ -60,8 +61,11 @@ namespace YAML
SimpleKey key = m_simpleKeys.top();
// 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;
}
m_simpleKeys.pop();
@@ -94,9 +98,11 @@ namespace YAML
return isValid;
}
// VerifyAllSimplyKeys
// . Pops all simple keys (with checking, but if we can't verify one, then pop it anyways).
void Scanner::VerifyAllSimpleKeys()
{
while(!m_simpleKeys.empty())
VerifySimpleKey();
VerifySimpleKey(true);
}
}

View File

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