
This issue trackerhas been migrated toGitHub, and is currentlyread-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.
Created on2014-07-14 00:01 byElizacat, last changed2022-04-11 14:58 byadmin. This issue is nowclosed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| testcase.py | Elizacat,2014-07-14 00:01 | Test case | ||
| trace.txt | Elizacat,2014-07-14 00:03 | |||
| issue21975.patch | Claudiu.Popa,2014-07-14 07:28 | review | ||
| sqlite3_row_new.patch | serhiy.storchaka,2014-07-14 12:56 | review | ||
| Messages (11) | |||
|---|---|---|---|
| msg222982 -(view) | Author: Elizabeth Myers (Elizacat)* | Date: 2014-07-14 00:01 | |
Pickling, unpickling, then using an sqlite3.Row object results in a segfault on at least Python 3.3.5, 3.4.0, and 3.4.1. I have attached a test case and a backtrace below.I know you're not supposed to pickle sqlite3.Row objects, as the given test case below results in an exception to the effect that sqlite3.Row objects cannot be pickled in Python 2.7. I don't think a segfault is the desired behaviour, however... | |||
| msg222983 -(view) | Author: Elizabeth Myers (Elizacat)* | Date: 2014-07-14 00:03 | |
The backtrace of the crash, if it helps | |||
| msg223001 -(view) | Author: PCManticore (Claudiu.Popa)*![]() | Date: 2014-07-14 07:28 | |
Hi, thanks for the report. Here's a patch which implements __setstate__ and __getstate__ for Row objects. | |||
| msg223015 -(view) | Author: Serhiy Storchaka (serhiy.storchaka)*![]() | Date: 2014-07-14 11:44 | |
The issue is not in pickling/unpickling, but in sqlite3.Row.__new__ which creates object in invalid state. Simple example:>>> import sqlite3>>> r = sqlite3.Row.__new__(sqlite3.Row)>>> len(r)Segmentation fault (core dumped) | |||
| msg223019 -(view) | Author: PCManticore (Claudiu.Popa)*![]() | Date: 2014-07-14 12:49 | |
Using your example, I can't make it to crash using the tip, nor with Python 3.4. | |||
| msg223020 -(view) | Author: PCManticore (Claudiu.Popa)*![]() | Date: 2014-07-14 12:51 | |
Nevermind, I didn't see the len call. | |||
| msg223021 -(view) | Author: Serhiy Storchaka (serhiy.storchaka)*![]() | Date: 2014-07-14 12:56 | |
Here is a patch which fixes crash. | |||
| msg223022 -(view) | Author: PCManticore (Claudiu.Popa)*![]() | Date: 2014-07-14 13:07 | |
It doesn't crash anymore with your patch, but the pickle.load fails:Traceback (most recent call last): File "a.py", line 19, in <module> load = pickle.loads(dump)TypeError: function takes exactly 2 arguments (0 given) | |||
| msg223024 -(view) | Author: Serhiy Storchaka (serhiy.storchaka)*![]() | Date: 2014-07-14 13:14 | |
For pickling open other issue. | |||
| msg223029 -(view) | Author: PCManticore (Claudiu.Popa)*![]() | Date: 2014-07-14 13:21 | |
Ups, I accidentally removed the patch review stage, sorry for that. | |||
| msg224936 -(view) | Author: Roundup Robot (python-dev)![]() | Date: 2014-08-06 14:55 | |
New changesetc46ad743bcb4 by Serhiy Storchaka in branch '2.7':Issue#21975: Fixed crash when using uninitialized sqlite3.Row (in particularhttp://hg.python.org/cpython/rev/c46ad743bcb4New changesetc1ca1c4c131b by Serhiy Storchaka in branch '3.4':Issue#21975: Fixed crash when using uninitialized sqlite3.Row (in particularhttp://hg.python.org/cpython/rev/c1ca1c4c131bNew changeset9244ed41057a by Serhiy Storchaka in branch 'default':Issue#21975: Fixed crash when using uninitialized sqlite3.Row (in particularhttp://hg.python.org/cpython/rev/9244ed41057a | |||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:58:05 | admin | set | github: 66174 |
| 2014-08-06 14:57:36 | serhiy.storchaka | set | status: open -> closed resolution: fixed stage: patch review -> resolved |
| 2014-08-06 14:55:46 | python-dev | set | nosy: +python-dev messages: +msg224936 |
| 2014-07-14 13:21:25 | Claudiu.Popa | set | messages: +msg223029 stage: patch review |
| 2014-07-14 13:14:31 | serhiy.storchaka | set | messages: +msg223024 |
| 2014-07-14 13:07:22 | Claudiu.Popa | set | messages: +msg223022 stage: patch review -> (no value) |
| 2014-07-14 12:56:01 | serhiy.storchaka | set | files: +sqlite3_row_new.patch messages: +msg223021 stage: patch review |
| 2014-07-14 12:51:16 | Claudiu.Popa | set | messages: +msg223020 |
| 2014-07-14 12:49:59 | Claudiu.Popa | set | messages: +msg223019 |
| 2014-07-14 11:44:06 | serhiy.storchaka | set | versions: + Python 2.7 nosy: +serhiy.storchaka messages: +msg223015 assignee:serhiy.storchaka stage: patch review -> (no value) |
| 2014-07-14 07:28:15 | Claudiu.Popa | set | files: +issue21975.patch versions: + Python 3.5, - Python 3.3 keywords: +patch nosy: +ghaering,Claudiu.Popa messages: +msg223001 stage: patch review |
| 2014-07-14 00:03:51 | Elizacat | set | files: +trace.txt messages: +msg222983 |
| 2014-07-14 00:01:29 | Elizacat | create | |