Skip to content

Commit a7e13f8

Browse files
committed
detect and raise on unreserved escapes.
1 parent 888ff8d commit a7e13f8

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

pytoml/__init__.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
ParseException,
55
)
66
from datetime import datetime
7-
from re import sub
7+
import re
88
import sys
99

1010
PY3 = sys.version_info[0] == 3
@@ -22,8 +22,8 @@ def delimitedList(type_, delimiter=","):
2222

2323
class TOMLParser(object):
2424
def __init__(self):
25-
key_name = Word(sub(r"[\[\]=\"]", "", printables))
26-
kgrp_name = Word(sub(r"[\[\]\.]", "", printables))
25+
key_name = Word(re.sub(r"[\[\]=\"]", "", printables))
26+
kgrp_name = Word(re.sub(r"[\[\]\.]", "", printables))
2727
basic_int = Optional("-") + ("0" | Word(nums))
2828

2929
types = dict(
@@ -53,7 +53,13 @@ def __init__(self):
5353
keyvalue.setParseAction(self._parse_keyvalue)
5454
keygroup_namespace.setParseAction(self._parse_keygroup_namespace)
5555

56-
_parse_string = lambda self, tok: unescape(tok[0])
56+
def _parse_string(self, src, loc, toks):
57+
match = re.search(r"(?<!\\)(\\[^0tnr\"\\])", toks[0])
58+
if match:
59+
raise ParseException("Reserved escape sequence \"%s\"" %
60+
match.group(), loc)
61+
return unescape(toks[0])
62+
5763
_parse_integer = lambda self, tok: int(tok[0])
5864
_parse_float = lambda self, tok: float(tok[0])
5965
_parse_boolean = lambda self, tok: bool(tok[0])

0 commit comments

Comments
 (0)