mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	It turns out that modifying the environment strings is not safe.
Treat them as read-only, and make a copy as appropriately. This was first reported by Bill Janssend and later by Craig Rowland and Ron Sedlmeyer. This fix is mine.
This commit is contained in:
		
							parent
							
								
									46ab6dfa89
								
							
						
					
					
						commit
						6a619f44c5
					
				
					 1 changed files with 17 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -290,19 +290,29 @@ convertenviron()
 | 
			
		|||
		return NULL;
 | 
			
		||||
	if (environ == NULL)
 | 
			
		||||
		return d;
 | 
			
		||||
	/* XXX This part ignores errors */
 | 
			
		||||
	/* This part ignores errors */
 | 
			
		||||
	for (e = environ; *e != NULL; e++) {
 | 
			
		||||
		PyObject *k;
 | 
			
		||||
		PyObject *v;
 | 
			
		||||
		char *p = strchr(*e, '=');
 | 
			
		||||
		if (p == NULL)
 | 
			
		||||
			continue;
 | 
			
		||||
		v = PyString_FromString(p+1);
 | 
			
		||||
		if (v == NULL)
 | 
			
		||||
		k = PyString_FromStringAndSize(*e, (int)(p-*e));
 | 
			
		||||
		if (k == NULL) {
 | 
			
		||||
			PyErr_Clear();
 | 
			
		||||
			continue;
 | 
			
		||||
		*p = '\0';
 | 
			
		||||
		if (PyDict_GetItemString(d, *e) == NULL)
 | 
			
		||||
			(void) PyDict_SetItemString(d, *e, v);
 | 
			
		||||
		*p = '=';
 | 
			
		||||
		}
 | 
			
		||||
		v = PyString_FromString(p+1);
 | 
			
		||||
		if (v == NULL) {
 | 
			
		||||
			PyErr_Clear();
 | 
			
		||||
			Py_DECREF(k);
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		if (PyDict_GetItem(d, k) == NULL) {
 | 
			
		||||
			if (PyDict_SetItem(d, k, v) != 0)
 | 
			
		||||
				PyErr_Clear();
 | 
			
		||||
		}
 | 
			
		||||
		Py_DECREF(k);
 | 
			
		||||
		Py_DECREF(v);
 | 
			
		||||
	}
 | 
			
		||||
#if defined(PYOS_OS2)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue