mirror of https://github.com/explosion/spaCy.git
* Add loop guard to Token.lefts and Token.rights properties
This commit is contained in:
parent
304339985e
commit
03e8a4293d
|
@ -198,6 +198,7 @@ cdef class Token:
|
||||||
"""The leftward immediate children of the word, in the syntactic
|
"""The leftward immediate children of the word, in the syntactic
|
||||||
dependency parse.
|
dependency parse.
|
||||||
"""
|
"""
|
||||||
|
cdef int nr_iter = 0
|
||||||
cdef const TokenC* ptr = self.c - (self.i - self.c.l_edge)
|
cdef const TokenC* ptr = self.c - (self.i - self.c.l_edge)
|
||||||
while ptr < self.c:
|
while ptr < self.c:
|
||||||
# If this head is still to the right of us, we can skip to it
|
# If this head is still to the right of us, we can skip to it
|
||||||
|
@ -211,6 +212,11 @@ cdef class Token:
|
||||||
ptr += 1
|
ptr += 1
|
||||||
else:
|
else:
|
||||||
ptr += 1
|
ptr += 1
|
||||||
|
nr_iter += 1
|
||||||
|
# This is ugly, but it's a way to guard out infinite loops
|
||||||
|
if nr_iter >= 10000000:
|
||||||
|
raise RuntimeError(
|
||||||
|
"Possibly infinite loop encountered while looking for token.lefts")
|
||||||
|
|
||||||
property rights:
|
property rights:
|
||||||
def __get__(self):
|
def __get__(self):
|
||||||
|
@ -218,6 +224,7 @@ cdef class Token:
|
||||||
dependency parse."""
|
dependency parse."""
|
||||||
cdef const TokenC* ptr = self.c + (self.c.r_edge - self.i)
|
cdef const TokenC* ptr = self.c + (self.c.r_edge - self.i)
|
||||||
tokens = []
|
tokens = []
|
||||||
|
cdef int nr_iter = 0
|
||||||
while ptr > self.c:
|
while ptr > self.c:
|
||||||
# If this head is still to the right of us, we can skip to it
|
# If this head is still to the right of us, we can skip to it
|
||||||
# No token that's between this token and this head could be our
|
# No token that's between this token and this head could be our
|
||||||
|
@ -229,6 +236,9 @@ cdef class Token:
|
||||||
ptr -= 1
|
ptr -= 1
|
||||||
else:
|
else:
|
||||||
ptr -= 1
|
ptr -= 1
|
||||||
|
if nr_iter >= 10000000:
|
||||||
|
raise RuntimeError(
|
||||||
|
"Possibly infinite loop encountered while looking for token.rights")
|
||||||
tokens.reverse()
|
tokens.reverse()
|
||||||
for t in tokens:
|
for t in tokens:
|
||||||
yield t
|
yield t
|
||||||
|
|
Loading…
Reference in New Issue