[Python-checkins] CVS: python/dist/src/Lib sre_parse.py,1.39,1.40
Fredrik Lundh
python-dev@python.org
Sun, 14 Jan 2001 13:00:46 -0800
- Previous message: [Python-checkins] CVS: python/dist/src/Lib aifc.py,1.38,1.39 anydbm.py,1.7,1.8 asynchat.py,1.7,1.8 asyncore.py,1.7,1.8 atexit.py,1.1,1.2 audiodev.py,1.9,1.10
- Next message: [Python-checkins] CVS: python/dist/src/Lib httplib.py,1.28,1.29
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv11051/Lib
Modified Files:
sre_parse.py
Log Message:
SRE: stricter pattern syntax checking (covers parts of bug #115900)
Index: sre_parse.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/sre_parse.py,v
retrieving revision 1.39
retrieving revision 1.40
diff -C2 -r1.39 -r1.40
*** sre_parse.py 2001/01/14 15:06:11 1.39
--- sre_parse.py 2001/01/14 21:00:44 1.40
***************
*** 9,12 ****
--- 9,14 ----
#
+ # XXX: show string offset and offending character for all errors
+
import string, sys
***************
*** 411,419 ****
code2 = LITERAL, ord(this)
if code1[0] != LITERAL or code2[0] != LITERAL:
! raise error, "illegal range"
lo = code1[1]
hi = code2[1]
if hi < lo:
! raise error, "illegal range"
set.append((RANGE, (lo, hi)))
else:
--- 413,421 ----
code2 = LITERAL, ord(this)
if code1[0] != LITERAL or code2[0] != LITERAL:
! raise error, "bad character range"
lo = code1[1]
hi = code2[1]
if hi < lo:
! raise error, "bad character range"
set.append((RANGE, (lo, hi)))
else:
***************
*** 458,462 ****
if hi:
max = int(hi)
! # XXX: <fl> check that hi >= lo ???
else:
raise error, "not supported"
--- 460,465 ----
if hi:
max = int(hi)
! if max < min:
! raise error, "bad repeat interval"
else:
raise error, "not supported"
***************
*** 466,469 ****
--- 469,474 ----
else:
raise error, "nothing to repeat"
+ if item[0][0] in (MIN_REPEAT, MAX_REPEAT):
+ raise error, "multiple repeat"
if source.match("?"):
subpattern[-1] = (MIN_REPEAT, (min, max, item))
***************
*** 494,498 ****
group = 1
if not isname(name):
! raise error, "illegal character in group name"
elif source.match("="):
# named backreference
--- 499,503 ----
group = 1
if not isname(name):
! raise error, "bad character in group name"
elif source.match("="):
# named backreference
***************
*** 506,510 ****
name = name + char
if not isname(name):
! raise error, "illegal character in group name"
gid = state.groupdict.get(name)
if gid is None:
--- 511,515 ----
name = name + char
if not isname(name):
! raise error, "bad character in group name"
gid = state.groupdict.get(name)
if gid is None:
***************
*** 548,551 ****
--- 553,558 ----
else:
# flags
+ if not FLAGS.has_key(source.next):
+ raise error, "unexpected end of pattern"
while FLAGS.has_key(source.next):
state.flags = state.flags | FLAGS[source.get()]
***************
*** 566,570 ****
while 1:
char = source.get()
! if char is None or char == ")":
break
raise error, "unknown extension"
--- 573,579 ----
while 1:
char = source.get()
! if char is None:
! raise error, "unexpected end of pattern"
! if char == ")":
break
raise error, "unknown extension"
***************
*** 593,596 ****
--- 602,606 ----
pattern = Pattern()
pattern.flags = flags
+ pattern.str = str
p = _parse_sub(source, pattern, 0)
***************
*** 640,644 ****
except ValueError:
if not isname(name):
! raise error, "illegal character in group name"
try:
index = pattern.groupindex[name]
--- 650,654 ----
except ValueError:
if not isname(name):
! raise error, "bad character in group name"
try:
index = pattern.groupindex[name]
- Previous message: [Python-checkins] CVS: python/dist/src/Lib aifc.py,1.38,1.39 anydbm.py,1.7,1.8 asynchat.py,1.7,1.8 asyncore.py,1.7,1.8 atexit.py,1.1,1.2 audiodev.py,1.9,1.10
- Next message: [Python-checkins] CVS: python/dist/src/Lib httplib.py,1.28,1.29
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]