Movatterモバイル変換


[0]ホーム

URL:


homepage

Issue21975

This issue trackerhas been migrated toGitHub, and is currentlyread-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title:Using pickled/unpickled sqlite3.Row results in segfault rather than exception
Type:crashStage:resolved
Components:Library (Lib)Versions:Python 3.4, Python 3.5, Python 2.7
process
Status:closedResolution:fixed
Dependencies:Superseder:
Assigned To: serhiy.storchakaNosy List: Claudiu.Popa, Elizacat, ghaering, python-dev, serhiy.storchaka
Priority:normalKeywords:patch

Created on2014-07-14 00:01 byElizacat, last changed2022-04-11 14:58 byadmin. This issue is nowclosed.

Files
File nameUploadedDescriptionEdit
testcase.pyElizacat,2014-07-14 00:01Test case
trace.txtElizacat,2014-07-14 00:03
issue21975.patchClaudiu.Popa,2014-07-14 07:28review
sqlite3_row_new.patchserhiy.storchaka,2014-07-14 12:56review
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)*(Python triager)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)*(Python committer)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)*(Python triager)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)*(Python triager)Date: 2014-07-14 12:51
Nevermind, I didn't see the len call.
msg223021 -(view)Author: Serhiy Storchaka (serhiy.storchaka)*(Python committer)Date: 2014-07-14 12:56
Here is a patch which fixes crash.
msg223022 -(view)Author: PCManticore (Claudiu.Popa)*(Python triager)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)*(Python committer)Date: 2014-07-14 13:14
For pickling open other issue.
msg223029 -(view)Author: PCManticore (Claudiu.Popa)*(Python triager)Date: 2014-07-14 13:21
Ups, I accidentally removed the patch review stage, sorry for that.
msg224936 -(view)Author: Roundup Robot (python-dev)(Python triager)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
DateUserActionArgs
2022-04-11 14:58:05adminsetgithub: 66174
2014-08-06 14:57:36serhiy.storchakasetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2014-08-06 14:55:46python-devsetnosy: +python-dev
messages: +msg224936
2014-07-14 13:21:25Claudiu.Popasetmessages: +msg223029
stage: patch review
2014-07-14 13:14:31serhiy.storchakasetmessages: +msg223024
2014-07-14 13:07:22Claudiu.Popasetmessages: +msg223022
stage: patch review -> (no value)
2014-07-14 12:56:01serhiy.storchakasetfiles: +sqlite3_row_new.patch

messages: +msg223021
stage: patch review
2014-07-14 12:51:16Claudiu.Popasetmessages: +msg223020
2014-07-14 12:49:59Claudiu.Popasetmessages: +msg223019
2014-07-14 11:44:06serhiy.storchakasetversions: + Python 2.7
nosy: +serhiy.storchaka

messages: +msg223015

assignee:serhiy.storchaka
stage: patch review -> (no value)
2014-07-14 07:28:15Claudiu.Popasetfiles: +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:51Elizacatsetfiles: +trace.txt

messages: +msg222983
2014-07-14 00:01:29Elizacatcreate
Supported byThe Python Software Foundation,
Powered byRoundup
Copyright © 1990-2022,Python Software Foundation
Legal Statements

[8]ページ先頭

©2009-2026 Movatter.jp