mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	Catch PyUnicode_AS_UNICODE() errors in fileutils.c
This commit is contained in:
		
							parent
							
								
									1f7951711c
								
							
						
					
					
						commit
						ee587eaa36
					
				
					 1 changed files with 11 additions and 2 deletions
				
			
		|  | @ -244,8 +244,12 @@ _Py_stat(PyObject *path, struct stat *statbuf) | ||||||
| #ifdef MS_WINDOWS | #ifdef MS_WINDOWS | ||||||
|     int err; |     int err; | ||||||
|     struct _stat wstatbuf; |     struct _stat wstatbuf; | ||||||
|  |     wchar_t *wpath; | ||||||
| 
 | 
 | ||||||
|     err = _wstat(PyUnicode_AS_UNICODE(path), &wstatbuf); |     wpath = PyUnicode_AsUnicode(path); | ||||||
|  |     if (wpath == NULL) | ||||||
|  |         return -1; | ||||||
|  |     err = _wstat(wpath, &wstatbuf); | ||||||
|     if (!err) |     if (!err) | ||||||
|         statbuf->st_mode = wstatbuf.st_mode; |         statbuf->st_mode = wstatbuf.st_mode; | ||||||
|     return err; |     return err; | ||||||
|  | @ -297,14 +301,19 @@ FILE* | ||||||
| _Py_fopen(PyObject *path, const char *mode) | _Py_fopen(PyObject *path, const char *mode) | ||||||
| { | { | ||||||
| #ifdef MS_WINDOWS | #ifdef MS_WINDOWS | ||||||
|  |     wchar_t *wpath; | ||||||
|     wchar_t wmode[10]; |     wchar_t wmode[10]; | ||||||
|     int usize; |     int usize; | ||||||
| 
 | 
 | ||||||
|  |     wpath = PyUnicode_AsUnicode(path); | ||||||
|  |     if (wpath == NULL) | ||||||
|  |         return NULL; | ||||||
|  | 
 | ||||||
|     usize = MultiByteToWideChar(CP_ACP, 0, mode, -1, wmode, sizeof(wmode)); |     usize = MultiByteToWideChar(CP_ACP, 0, mode, -1, wmode, sizeof(wmode)); | ||||||
|     if (usize == 0) |     if (usize == 0) | ||||||
|         return NULL; |         return NULL; | ||||||
| 
 | 
 | ||||||
|     return _wfopen(PyUnicode_AS_UNICODE(path), wmode); |     return _wfopen(wpath, wmode); | ||||||
| #else | #else | ||||||
|     FILE *f; |     FILE *f; | ||||||
|     PyObject *bytes = PyUnicode_EncodeFSDefault(path); |     PyObject *bytes = PyUnicode_EncodeFSDefault(path); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner