summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorFredrik Lundh <fredrik@pythonware.com>2001-10-18 19:30:16 (GMT)
committerFredrik Lundh <fredrik@pythonware.com>2001-10-18 19:30:16 (GMT)
commit397a654791e6bc8b108945e45e7d1393cc6f32d4 (patch)
tree0bcf95e153017bddb35c1549d2e7c9e31f676111 /Lib
parent3bb4d214a470c4da4af63f5a2c098cc886b9e857 (diff)
downloadcpython-397a654791e6bc8b108945e45e7d1393cc6f32d4.zip
cpython-397a654791e6bc8b108945e45e7d1393cc6f32d4.tar.gz
cpython-397a654791e6bc8b108945e45e7d1393cc6f32d4.tar.bz2
SRE bug #441409:
compile should raise error for non-strings SRE bug #432570, 448951: reset group after failed match also bumped version number to 2.2.0
Diffstat (limited to 'Lib')
-rw-r--r--Lib/sre.py10
-rw-r--r--Lib/test/test_sre.py6
2 files changed, 13 insertions, 3 deletions
diff --git a/Lib/sre.py b/Lib/sre.py
index 7a640f9..70d0148 100644
--- a/Lib/sre.py
+++ b/Lib/sre.py
@@ -104,7 +104,7 @@ __all__ = [ "match", "search", "sub", "subn", "split", "findall",
"U", "IGNORECASE", "LOCALE", "MULTILINE", "DOTALL", "VERBOSE",
"UNICODE", "error" ]
-__version__ = "2.1.1"
+__version__ = "2.2.0"
# this module works under 1.5.2 and later. don't use string methods
import string
@@ -197,6 +197,8 @@ def escape(pattern):
_cache = {}
_cache_repl = {}
+_pattern_type = type(sre_compile.compile("", 0))
+
_MAXCACHE = 100
def _join(seq, sep):
@@ -209,8 +211,10 @@ def _compile(*key):
if p is not None:
return p
pattern, flags = key
- if type(pattern) not in sre_compile.STRING_TYPES:
+ if type(pattern) is _pattern_type:
return pattern
+ if type(pattern) not in sre_compile.STRING_TYPES:
+ raise TypeError, "first argument must be string or compiled pattern"
try:
p = sre_compile.compile(pattern, flags)
except error, v:
@@ -312,7 +316,7 @@ import copy_reg
def _pickle(p):
return _compile, (p.pattern, p.flags)
-copy_reg.pickle(type(_compile("", 0)), _pickle, _compile)
+copy_reg.pickle(_pattern_type, _pickle, _compile)
# --------------------------------------------------------------------
# experimental stuff (see python-dev discussions for details)
diff --git a/Lib/test/test_sre.py b/Lib/test/test_sre.py
index 4a71447..12a66f9 100644
--- a/Lib/test/test_sre.py
+++ b/Lib/test/test_sre.py
@@ -204,6 +204,12 @@ test(r"""pat.match('a').group(1, 2, 3)""", ('a', None, None))
test(r"""pat.match('b').group('a1', 'b2', 'c3')""", (None, 'b', None))
test(r"""pat.match('ac').group(1, 'b2', 3)""", ('a', None, 'c'))
+# bug 448951 (similar to 429357, but with single char match)
+# (Also test greedy matches.)
+for op in '','?','*':
+ test(r"""sre.match(r'((.%s):)?z', 'z').groups()"""%op, (None, None))
+ test(r"""sre.match(r'((.%s):)?z', 'a:z').groups()"""%op, ('a:', 'a'))
+
if verbose:
print "Running tests on sre.escape"