| msg223062 - (view) | Author: Anthony LaTorre (Anthony.LaTorre) | Date: 2014-07-14 21:53 |
I get a segfault when trying to cast a string to a structure. >>> import ctypes >>> class Struct(ctypes.Structure): ... _fields_ = [('a', ctypes.c_uint32)] ... >>> s = '0'*100 >>> ctypes.cast(s,Struct) Segmentation fault The docs (https://docs.python.org/2/library/ctypes.html#ctypes.cast) say that `obj` "must be an object that can be interpreted as a pointer", so I assume this should return the same exception you get when trying to cast a list: >>> ctypes.cast(range(10),Struct) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python3.4/ctypes/__init__.py", line 488, in cast return _cast(obj, obj, typ) ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type |
| msg223069 - (view) | Author: Eryk Sun (eryksun) *  | Date: 2014-07-15 00:15 |
You need to cast to a pointer type, i.e. POINTER(Struct). Trying to cast to just Struct should raise a TypeError. Instead this revealed a bug in cast_check_pointertype (3.4.1): http://hg.python.org/cpython/file/c0e311e010fc/Modules/_ctypes/_ctypes.c#l5225 dict->proto is NULL in the Struct type's stgdict, so PyUnicode_Check(dict->proto) segfaults. A simple fix is to add a check for this on line 5235: if (dict && dict->proto) { Then cast will raise the expected TypeError from line 5242 on return from line 5255. |
| msg223100 - (view) | Author: Mark Lawrence (BreamoreBoy) * | Date: 2014-07-15 11:07 |
I'll provide a patch but I don't know which test file to use, can somebody please advise. |
| msg303468 - (view) | Author: Oren Milman (Oren Milman) * | Date: 2017-10-01 17:14 |
IMHO, Lib/ctypes/test/test_cast.py is the relevant test. Mark, do you still wish to provide a fix for that? (Otherwise, i would be happy to open a PR.) |
| msg316334 - (view) | Author: Steve Dower (steve.dower) *  | Date: 2018-05-09 21:39 |
New changeset d518d8bc8d5dac1a1270612f424d33e0e5afc2b5 by Steve Dower (Oren Milman) in branch 'master': bpo-21983: Fix a crash in ctypes.cast() when passed a ctypes structured data type (GH-3859) https://github.com/python/cpython/commit/d518d8bc8d5dac1a1270612f424d33e0e5afc2b5 |
| msg316337 - (view) | Author: Steve Dower (steve.dower) *  | Date: 2018-05-09 21:44 |
The backport to 2.7 needs some help. I can't do it on my laptop for the next week, but I'll try to get to it eventually. Feel free to get there first. |
| msg316339 - (view) | Author: miss-islington (miss-islington) | Date: 2018-05-09 22:28 |
New changeset 8ac158a6dfb86880e22003afe0ff39ec31b0a094 by Miss Islington (bot) in branch '3.6': bpo-21983: Fix a crash in ctypes.cast() when passed a ctypes structured data type (GH-3859) https://github.com/python/cpython/commit/8ac158a6dfb86880e22003afe0ff39ec31b0a094 |
| msg317754 - (view) | Author: miss-islington (miss-islington) | Date: 2018-05-26 18:39 |
New changeset e60f6e1864d80d80f8928afadec617d161a64150 by Miss Islington (bot) in branch '3.7': bpo-21983: Fix a crash in ctypes.cast() when passed a ctypes structured data type (GH-3859) https://github.com/python/cpython/commit/e60f6e1864d80d80f8928afadec617d161a64150 |
| msg326039 - (view) | Author: Steve Dower (steve.dower) *  | Date: 2018-09-21 20:48 |
Still needs a backport to 2.7 |
| msg365040 - (view) | Author: STINNER Victor (vstinner) *  | Date: 2020-03-26 00:41 |
> Still needs a backport to 2.7 No longer needed, I close the issue. |
|
| Date | User | Action | Args |
| 2022-04-11 14:58:05 | admin | set | github: 66182 |
| 2020-03-26 00:41:45 | vstinner | set | status: open -> closed
nosy: + vstinner messages: + msg365040
resolution: fixed stage: backport needed -> resolved |
| 2019-08-02 22:36:47 | steve.dower | set | assignee: steve.dower -> stage: patch review -> backport needed versions: - Python 3.6, Python 3.7, Python 3.8 |
| 2018-09-21 20:48:47 | steve.dower | set | messages: + msg326039 |
| 2018-05-26 18:39:54 | miss-islington | set | messages: + msg317754 |
| 2018-05-09 22:28:01 | miss-islington | set | nosy: + miss-islington messages: + msg316339
|
| 2018-05-09 21:44:27 | steve.dower | set | messages: + msg316337 versions: + Python 3.6 |
| 2018-05-09 21:42:07 | miss-islington | set | pull_requests: + pull_request6434 |
| 2018-05-09 21:40:12 | miss-islington | set | stage: backport needed -> patch review pull_requests: + pull_request6433 |
| 2018-05-09 21:40:00 | steve.dower | set | assignee: steve.dower stage: patch review -> backport needed versions: + Python 3.8, - Python 3.4 |
| 2018-05-09 21:39:00 | steve.dower | set | nosy: + steve.dower messages: + msg316334
|
| 2017-10-02 18:44:28 | Oren Milman | set | versions: + Python 2.7, Python 3.4 |
| 2017-10-02 18:44:04 | Oren Milman | set | versions: + Python 3.7, - Python 2.7, Python 3.4 |
| 2017-10-02 18:43:20 | Oren Milman | set | keywords: + patch stage: patch review pull_requests: + pull_request3839 |
| 2017-10-02 00:32:54 | BreamoreBoy | set | nosy: - BreamoreBoy
|
| 2017-10-01 17:14:06 | Oren Milman | set | nosy: + Oren Milman messages: + msg303468
|
| 2014-07-15 11:07:41 | BreamoreBoy | set | nosy: + belopolsky, amaury.forgeotdarc, meador.inge, BreamoreBoy messages: + msg223100
|
| 2014-07-15 00:15:55 | eryksun | set | nosy: + eryksun messages: + msg223069
|
| 2014-07-14 21:54:05 | Anthony.LaTorre | set | components: + ctypes |
| 2014-07-14 21:53:26 | Anthony.LaTorre | create | |