mirror of
https://github.com/explosion/spaCy.git
synced 2025-07-10 16:22:29 +03:00
* Add some bounds checking around state arrays
This commit is contained in:
parent
89ae218b75
commit
065c2e1d2d
|
@ -28,6 +28,8 @@ cdef class StateClass:
|
||||||
for i in range(length):
|
for i in range(length):
|
||||||
self._sent[i] = sent[i]
|
self._sent[i] = sent[i]
|
||||||
self._buffer[i] = i
|
self._buffer[i] = i
|
||||||
|
for i in range(length, length + 5):
|
||||||
|
self._sent[i].lex = &EMPTY_LEXEME
|
||||||
return self
|
return self
|
||||||
|
|
||||||
cdef inline int S(self, int i) nogil:
|
cdef inline int S(self, int i) nogil:
|
||||||
|
|
|
@ -34,6 +34,10 @@ cdef class StateClass:
|
||||||
return self._sent[i].head + i
|
return self._sent[i].head + i
|
||||||
|
|
||||||
cdef int E(self, int i) nogil:
|
cdef int E(self, int i) nogil:
|
||||||
|
if self._e_i <= 0 or self._e_i >= self.length:
|
||||||
|
return -1
|
||||||
|
if i <= 0 or i >= self.length:
|
||||||
|
return -1
|
||||||
return self._ents[self._e_i-1].start
|
return self._ents[self._e_i-1].start
|
||||||
|
|
||||||
cdef int L(self, int i, int idx) nogil:
|
cdef int L(self, int i, int idx) nogil:
|
||||||
|
@ -145,6 +149,7 @@ cdef class StateClass:
|
||||||
return self.length - self._b_i
|
return self.length - self._b_i
|
||||||
|
|
||||||
cdef void push(self) nogil:
|
cdef void push(self) nogil:
|
||||||
|
if self.B(0) != -1:
|
||||||
self._stack[self._s_i] = self.B(0)
|
self._stack[self._s_i] = self.B(0)
|
||||||
self._s_i += 1
|
self._s_i += 1
|
||||||
self._b_i += 1
|
self._b_i += 1
|
||||||
|
@ -152,6 +157,7 @@ cdef class StateClass:
|
||||||
self._break = -1
|
self._break = -1
|
||||||
|
|
||||||
cdef void pop(self) nogil:
|
cdef void pop(self) nogil:
|
||||||
|
if self._s_i >= 1:
|
||||||
self._s_i -= 1
|
self._s_i -= 1
|
||||||
|
|
||||||
cdef void unshift(self) nogil:
|
cdef void unshift(self) nogil:
|
||||||
|
@ -197,6 +203,7 @@ cdef class StateClass:
|
||||||
self._sent[head].l_kids -= 1
|
self._sent[head].l_kids -= 1
|
||||||
|
|
||||||
cdef void open_ent(self, int label) nogil:
|
cdef void open_ent(self, int label) nogil:
|
||||||
|
if 0 <= self._e_i < self.length:
|
||||||
self._ents[self._e_i].start = self.B(0)
|
self._ents[self._e_i].start = self.B(0)
|
||||||
self._ents[self._e_i].label = label
|
self._ents[self._e_i].label = label
|
||||||
self._ents[self._e_i].end = -1
|
self._ents[self._e_i].end = -1
|
||||||
|
@ -212,6 +219,7 @@ cdef class StateClass:
|
||||||
self._sent[i].ent_type = ent_type
|
self._sent[i].ent_type = ent_type
|
||||||
|
|
||||||
cdef void set_break(self, int _) nogil:
|
cdef void set_break(self, int _) nogil:
|
||||||
|
if 0 <= self.B(0) < self.length:
|
||||||
self._sent[self.B(0)].sent_end = True
|
self._sent[self.B(0)].sent_end = True
|
||||||
self._break = self._b_i
|
self._break = self._b_i
|
||||||
|
|
||||||
|
@ -223,6 +231,7 @@ cdef class StateClass:
|
||||||
self._b_i = src._b_i
|
self._b_i = src._b_i
|
||||||
self._s_i = src._s_i
|
self._s_i = src._s_i
|
||||||
self._e_i = src._e_i
|
self._e_i = src._e_i
|
||||||
|
self._break = src._break
|
||||||
|
|
||||||
def print_state(self, words):
|
def print_state(self, words):
|
||||||
words = list(words) + ['_']
|
words = list(words) + ['_']
|
||||||
|
|
Loading…
Reference in New Issue
Block a user