Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions tests/textfsm_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,12 @@ def testFSMValue(self):
textfsm.TextFSMTemplateError, v.Parse, r'Value beer (boo)hoo\)'
)

# A missing regex is a template error, not an IndexError.
v = textfsm.TextFSMValue(options_class=textfsm.TextFSMOptions)
self.assertRaises(
textfsm.TextFSMTemplateError, v.Parse, 'Value Required beer'
)

# Unbalanced parenthesis can exist if within square "[]" braces.
v = textfsm.TextFSMValue(options_class=textfsm.TextFSMOptions)
v.Parse('Value beer (boo[(]hoo)')
Expand Down Expand Up @@ -265,6 +271,9 @@ def testParseFSMVariables(self):
buf = 'Value filldown,Required Wine ((c|C)laret)'
f = io.StringIO(buf)
self.assertRaises(textfsm.TextFSMTemplateError, t._ParseFSMVariables, f)
buf = 'Value Required Beer'
f = io.StringIO(buf)
self.assertRaises(textfsm.TextFSMTemplateError, t._ParseFSMVariables, f)

# Values that look bad but are OK.
buf = (
Expand Down
7 changes: 6 additions & 1 deletion textfsm/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,12 @@ def Parse(self, value):
"Invalid Value name '%s' or name too long." % self.name
)

if self.regex[0] != '(' or self.regex[-1] != ')' or self.regex[-2] == '\\':
if (
not self.regex
or self.regex[0] != '('
or self.regex[-1] != ')'
or self.regex[-2] == '\\'
):
raise TextFSMTemplateError(
"Value '%s' must be contained within a '()' pair." % self.regex
)
Expand Down