mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	Issue #24993: Handle import error in namereplace error handler
Handle PyCapsule_Import() failure (exception) in PyCodec_NameReplaceErrors(): return immedialty NULL.
This commit is contained in:
		
							parent
							
								
									aba2466d09
								
							
						
					
					
						commit
						38b8ae0f5b
					
				
					 1 changed files with 5 additions and 7 deletions
				
			
		|  | @ -966,7 +966,6 @@ PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc) | |||
| } | ||||
| 
 | ||||
| static _PyUnicode_Name_CAPI *ucnhash_CAPI = NULL; | ||||
| static int ucnhash_initialized = 0; | ||||
| 
 | ||||
| PyObject *PyCodec_NameReplaceErrors(PyObject *exc) | ||||
| { | ||||
|  | @ -988,17 +987,17 @@ PyObject *PyCodec_NameReplaceErrors(PyObject *exc) | |||
|             return NULL; | ||||
|         if (!(object = PyUnicodeEncodeError_GetObject(exc))) | ||||
|             return NULL; | ||||
|         if (!ucnhash_initialized) { | ||||
|         if (!ucnhash_CAPI) { | ||||
|             /* load the unicode data module */ | ||||
|             ucnhash_CAPI = (_PyUnicode_Name_CAPI *)PyCapsule_Import( | ||||
|                                             PyUnicodeData_CAPSULE_NAME, 1); | ||||
|             ucnhash_initialized = 1; | ||||
|             if (!ucnhash_CAPI) | ||||
|                 return NULL; | ||||
|         } | ||||
|         for (i = start, ressize = 0; i < end; ++i) { | ||||
|             /* object is guaranteed to be "ready" */ | ||||
|             c = PyUnicode_READ_CHAR(object, i); | ||||
|             if (ucnhash_CAPI && | ||||
|                 ucnhash_CAPI->getname(NULL, c, buffer, sizeof(buffer), 1)) { | ||||
|             if (ucnhash_CAPI->getname(NULL, c, buffer, sizeof(buffer), 1)) { | ||||
|                 replsize = 1+1+1+(int)strlen(buffer)+1; | ||||
|             } | ||||
|             else if (c >= 0x10000) { | ||||
|  | @ -1021,8 +1020,7 @@ PyObject *PyCodec_NameReplaceErrors(PyObject *exc) | |||
|             i < end; ++i) { | ||||
|             c = PyUnicode_READ_CHAR(object, i); | ||||
|             *outp++ = '\\'; | ||||
|             if (ucnhash_CAPI && | ||||
|                 ucnhash_CAPI->getname(NULL, c, buffer, sizeof(buffer), 1)) { | ||||
|             if (ucnhash_CAPI->getname(NULL, c, buffer, sizeof(buffer), 1)) { | ||||
|                 *outp++ = 'N'; | ||||
|                 *outp++ = '{'; | ||||
|                 strcpy((char *)outp, buffer); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner