Issue 1494487: PyUnicode_Resize cannot resize shared unicode object (original) (raw)

Issue1494487

Created on 2006-05-24 18:24 by ocean-city, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (2)
msg50351 - (view) Author: Hirokazu Yamamoto (ocean-city) * (Python committer) Date: 2006-05-24 18:24
I found following code fails. PyUnicodeObject *v1 = _PyUnicode_New(0); PyUnicodeObject *v2 = _PyUnicode_New(0); _PyUnicode_Resize(&v1, 1); Py_DECREF(v1); Py_DECREF(v2); Error message is... SystemError: E:\python-dev\trunk\Objects\unicodeobject.c:335: bad argument to internal function This happens because _PyUnicode_New(0) returns empty_unicode, and its ob_refcnt becomes 2 on second call. I think refcnt check bellow is not needed. Is this right fix? Index: Objects/unicodeobject.c =================================================================== --- Objects/unicodeobject.c (revision 46192) +++ Objects/unicodeobject.c (working copy) @@ -331,7 +331,7 @@ return -1; } v = (PyUnicodeObject *)*unicode; - if (v == NULL | !PyUnicode_Check(v) v->ob_refcnt != 1
msg50352 - (view) Author: Walter Dörwald (doerwalter) * (Python committer) Date: 2006-05-26 15:07
Logged In: YES user_id=89016 This patch opens the door for hard to detect bugs: What if PyUnicode_Resize() gets passed an object that is *not* one of the preallocated size 0 or size 1 strings, but has a refcount > 1? In this case your code falls through to unicode_resize() which happily modifies an immutable shared object.
History
Date User Action Args
2022-04-11 14:56:17 admin set github: 43404
2006-05-24 18:24:50 ocean-city create