diff --git a/picard/script/parser.py b/picard/script/parser.py index 497766c74..df467b312 100644 --- a/picard/script/parser.py +++ b/picard/script/parser.py @@ -321,6 +321,8 @@ Grammar: text.append(chr(int(codepoint, 16))) except (TypeError, ValueError): self.__raise_unicode(codepoint) + elif ch is None: + self.__raise_eof() elif ch not in "$%(),\\": self.__raise_char(ch) else: diff --git a/test/test_script.py b/test/test_script.py index 392b0d941..192ffe9a2 100644 --- a/test/test_script.py +++ b/test/test_script.py @@ -1010,6 +1010,12 @@ class ScriptParserTest(PicardTestCase): def test_char_escape(self): self.assertScriptResultEquals(r"\n\t\$\%\(\)\,\\", "\n\t$%(),\\") + def test_char_escape_unexpected_char(self): + self.assertRaises(ScriptSyntaxError, self.parser.eval, r'\x') + + def test_char_escape_end_of_file(self): + self.assertRaises(ScriptEndOfFile, self.parser.eval, 'foo\\') + def test_raise_unknown_function(self): self.assertRaises(ScriptUnknownFunction, self.parser.eval, '$unknownfn()')