mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-10-31 07:57:35 +03:00 
			
		
		
		
	Check for out-of-memory when calling calloc. Closes #1446
This commit is contained in:
		
							parent
							
								
									0f9d966317
								
							
						
					
					
						commit
						dd5b2d8fa3
					
				|  | @ -2,6 +2,8 @@ from libc.string cimport memcpy, memset, memmove | |||
| from libc.stdlib cimport malloc, calloc, free | ||||
| from libc.stdint cimport uint32_t, uint64_t | ||||
| 
 | ||||
| from cpython.exc cimport PyErr_CheckSignals, PyErr_SetFromErrno | ||||
| 
 | ||||
| from murmurhash.mrmr cimport hash64 | ||||
| 
 | ||||
| from ..vocab cimport EMPTY_LEXEME | ||||
|  | @ -55,6 +57,11 @@ cdef cppclass StateC: | |||
|         this.shifted = <bint*>calloc(length + (PADDING * 2), sizeof(bint)) | ||||
|         this._sent = <TokenC*>calloc(length + (PADDING * 2), sizeof(TokenC)) | ||||
|         this._ents = <Entity*>calloc(length + (PADDING * 2), sizeof(Entity)) | ||||
|         if not (this._buffer and this._stack and this.shifted | ||||
|                 and this._sent and this._ents): | ||||
|             with gil: | ||||
|                 PyErr_SetFromErrno(MemoryError) | ||||
|                 PyErr_CheckSignals() | ||||
|         memset(&this._hist, 0, sizeof(this._hist)) | ||||
|         this.offset = 0 | ||||
|         cdef int i | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ cimport numpy as np | |||
| 
 | ||||
| from libcpp.vector cimport vector | ||||
| from cpython.ref cimport PyObject, Py_INCREF, Py_XDECREF | ||||
| from cpython.exc cimport PyErr_CheckSignals | ||||
| from cpython.exc cimport PyErr_CheckSignals, PyErr_SetFromErrno | ||||
| from libc.stdint cimport uint32_t, uint64_t | ||||
| from libc.string cimport memset, memcpy | ||||
| from libc.stdlib cimport malloc, calloc, free | ||||
|  | @ -429,6 +429,7 @@ cdef class Parser: | |||
|                 self._parseC(states[i], | ||||
|                     feat_weights, hW, hb, | ||||
|                     nr_class, nr_hidden, nr_feat, nr_piece) | ||||
|         PyErr_CheckSignals() | ||||
|         return state_objs | ||||
| 
 | ||||
|     cdef void _parseC(self, StateC* state,  | ||||
|  | @ -438,6 +439,10 @@ cdef class Parser: | |||
|         is_valid = <int*>calloc(nr_class, sizeof(int)) | ||||
|         vectors = <float*>calloc(nr_hidden * nr_piece, sizeof(float)) | ||||
|         scores = <float*>calloc(nr_class, sizeof(float)) | ||||
|         if not (token_ids and is_valid and vectors and scores): | ||||
|             with gil: | ||||
|                 PyErr_SetFromErrno(MemoryError) | ||||
|                 PyErr_CheckSignals() | ||||
|          | ||||
|         while not state.is_final(): | ||||
|             state.set_context_tokens(token_ids, nr_feat) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user