re-pcre: Allocate match span array of needed size.

asyncio-segfault
Paul Sokolovsky 2014-04-11 05:59:38 +03:00
rodzic 74d5eccc98
commit a943b0f2e8
1 zmienionych plików z 11 dodań i 1 usunięć

Wyświetl plik

@ -14,12 +14,19 @@ pcre_compile = pcre.func("p", "pcre_compile", "sipps")
# int options, int *ovector, int ovecsize);
pcre_exec = pcre.func("i", "pcre_exec", "ppsiiipi")
# int pcre_fullinfo(const pcre *code, const pcre_extra *extra,
# int what, void *where);
pcre_fullinfo = pcre.func("i", "pcre_fullinfo", "ppip")
IGNORECASE = I = 1
MULTILINE = M = 2
DOTALL = S = 4
VERBOSE = X = 8
PCRE_ANCHORED = 0x10
PCRE_INFO_CAPTURECOUNT = 2
class PCREMatch:
@ -38,7 +45,10 @@ class PCREPattern:
self.obj = compiled_ptn
def search(self, s, _flags=0):
ov = array.array('i', [0, 0, 0] * 2)
buf = bytes(4)
pcre_fullinfo(self.obj, None, PCRE_INFO_CAPTURECOUNT, buf)
cap_count = int.from_bytes(buf)
ov = array.array('i', [0, 0, 0] * (cap_count + 1))
num = pcre_exec(self.obj, None, s, len(s), 0, _flags, ov, len(ov))
if num == -1:
# No match