Movatterモバイル変換


[0]ホーム

URL:


homepage

Issue24583

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:set.update(): Crash when source set is changed during merging
Type:crashStage:resolved
Components:Interpreter CoreVersions:Python 3.6, Python 3.5
process
Status:closedResolution:not a bug
Dependencies:Superseder:
Assigned To: rhettingerNosy List: larry, ned.deily, python-dev, rhettinger, serhiy.storchaka
Priority:release blockerKeywords:patch

Created on2015-07-07 11:56 byserhiy.storchaka, last changed2022-04-11 14:58 byadmin. This issue is nowclosed.

Files
File nameUploadedDescriptionEdit
test_set__merge_and_mutate.patchserhiy.storchaka,2015-07-07 11:56review
index_to_entry.diffrhettinger,2015-07-08 15:54review
intermediary.diffrhettinger,2015-07-10 03:24review
set_add_entry_leak.patchserhiy.storchaka,2015-07-19 19:20review
set_named_exits.diffrhettinger,2015-07-20 05:34review
set_self_contained.diffrhettinger,2015-07-20 05:55Make the logic self-contained so it can't be called incorrectly.review
Messages (15)
msg246403 -(view)Author: Serhiy Storchaka (serhiy.storchaka)*(Python committer)Date: 2015-07-07 11:56
When the set is not empty and set.update() argument is set that is modified during merging, the crash is caused. Here is a test that reproduces a crash. Only Python 3.5+ is affected.
msg246471 -(view)Author: Serhiy Storchaka (serhiy.storchaka)*(Python committer)Date: 2015-07-08 20:13
LGTM for 3.5.But 3.6 has other bug. Changeset637e197be547 looks incorrect to me. key should be increfed before calling PyObject_RichCompareBool() for the same reason as startkey.
msg246472 -(view)Author: Raymond Hettinger (rhettinger)*(Python committer)Date: 2015-07-08 21:40
Can you produce a test case?Perhaps the incref/decref pair ought to be moved into PyObject_RichCompareBool().  It doesn't make much sense for the callers to do the work.
msg246477 -(view)Author: Serhiy Storchaka (serhiy.storchaka)*(Python committer)Date: 2015-07-09 02:09
The same test is crashed in 3.6 even with index_to_entry.diff../python -m test.regrtest -F -m test_merge_and_mutate test_set
msg246513 -(view)Author: Serhiy Storchaka (serhiy.storchaka)*(Python committer)Date: 2015-07-09 17:39
> Perhaps the incref/decref pair ought to be moved into PyObject_RichCompareBool().This wouldn't help because key can be used after PyObject_RichCompareBool().
msg246572 -(view)Author: Serhiy Storchaka (serhiy.storchaka)*(Python committer)Date: 2015-07-10 17:43
intermediary.diff LGTM.
msg246792 -(view)Author: Roundup Robot (python-dev)(Python triager)Date: 2015-07-16 06:54
New changeset5c3812412b6f by Raymond Hettinger in branch '3.5':Issue#24583: Fix crash when set is mutated while being updated.https://hg.python.org/cpython/rev/5c3812412b6fNew changeset05cb67dab161 by Raymond Hettinger in branch 'default':Issue#24583: Fix crash when set is mutated while being updated.https://hg.python.org/cpython/rev/05cb67dab161
msg246947 -(view)Author: Serhiy Storchaka (serhiy.storchaka)*(Python committer)Date: 2015-07-19 19:20
5c3812412b6f caused a refleak.$ ./python -m test.regrtest -uall -R 3:3 test_set[1/1] test_setbeginning 6 repetitions123456......test_set leaked [23561, 24961, 23961] references, sum=72483test_set leaked [785, 787, 787] memory blocks, sum=23591 test failed:    test_setProposed patch fixes this.
msg246958 -(view)Author: Raymond Hettinger (rhettinger)*(Python committer)Date: 2015-07-20 05:12
3.6 only.  Correct?
msg246961 -(view)Author: Roundup Robot (python-dev)(Python triager)Date: 2015-07-20 05:23
New changesetacb5b177dd4e by Raymond Hettinger in branch 'default':Issue#24583: Fix refcount leak.https://hg.python.org/cpython/rev/acb5b177dd4e
msg246962 -(view)Author: Serhiy Storchaka (serhiy.storchaka)*(Python committer)Date: 2015-07-20 05:24
AFAIK 3.5+ (not tested).
msg246964 -(view)Author: Raymond Hettinger (rhettinger)*(Python committer)Date: 2015-07-20 05:34
Added a patch to neaten it up a bit by naming the exit conditions and avoiding the unnecessary extra incref/decref pair around the resize call.
msg246965 -(view)Author: Raymond Hettinger (rhettinger)*(Python committer)Date: 2015-07-20 05:55
Added a variant patch that brings the steps together in a more logical manner (single entry point at the top and the named exits at the bottom, brings refcount adjustment logic together in a more coherent way).  The "restart" target is done the same way as the "top" target in dictobject.c.   Added a comment explaining why the pre-increment is necessary.
msg246970 -(view)Author: Serhiy Storchaka (serhiy.storchaka)*(Python committer)Date: 2015-07-20 08:23
Both variants LGTM. But set_self_contained.diff seems better.I suppose this is 3.6 only.
msg246977 -(view)Author: Roundup Robot (python-dev)(Python triager)Date: 2015-07-20 11:34
New changeset3f2c12c0abdb by Raymond Hettinger in branch 'default':Issue#24583:  Consolidate previous set object updates into a single functionhttps://hg.python.org/cpython/rev/3f2c12c0abdb
History
DateUserActionArgs
2022-04-11 14:58:18adminsetnosy: +larry,ned.deily
github: 68771
2015-07-20 11:34:55rhettingersetstatus: open -> closed
resolution: not a bug
stage: patch review -> resolved
2015-07-20 11:34:13python-devsetmessages: +msg246977
2015-07-20 08:23:50serhiy.storchakasetmessages: +msg246970
2015-07-20 05:55:57rhettingersetfiles: +set_self_contained.diff

messages: +msg246965
2015-07-20 05:34:26rhettingersetfiles: +set_named_exits.diff

messages: +msg246964
2015-07-20 05:24:26serhiy.storchakasetmessages: +msg246962
2015-07-20 05:23:40python-devsetmessages: +msg246961
2015-07-20 05:12:59rhettingersetmessages: +msg246958
2015-07-19 19:20:59serhiy.storchakasetstatus: closed -> open
files: +set_add_entry_leak.patch
messages: +msg246947

resolution: fixed -> (no value)
priority: high -> release blocker
2015-07-16 06:58:35rhettingersetstatus: open -> closed
resolution: fixed
2015-07-16 06:54:21python-devsetnosy: +python-dev
messages: +msg246792
2015-07-10 17:43:32serhiy.storchakasetmessages: +msg246572
2015-07-10 03:24:44rhettingersetfiles: +intermediary.diff
2015-07-09 17:39:34serhiy.storchakasetmessages: +msg246513
2015-07-09 02:09:55serhiy.storchakasetmessages: +msg246477
2015-07-08 21:42:08vstinnersettitle: Crash when source set is changed during merging -> set.update(): Crash when source set is changed during merging
2015-07-08 21:40:38rhettingersetmessages: +msg246472
2015-07-08 20:13:30serhiy.storchakasetmessages: +msg246471
2015-07-08 20:13:12serhiy.storchakasetmessages: -msg246469
2015-07-08 20:11:19serhiy.storchakasetmessages: +msg246469
2015-07-08 16:17:43rhettingersetstage: needs patch -> patch review
2015-07-08 15:54:01rhettingersetfiles: +index_to_entry.diff
2015-07-07 22:52:47rhettingersetpriority: normal -> high
2015-07-07 22:52:03rhettingersetassignee:rhettinger
2015-07-07 11:56:10serhiy.storchakacreate
Supported byThe Python Software Foundation,
Powered byRoundup
Copyright © 1990-2022,Python Software Foundation
Legal Statements

[8]ページ先頭

©2009-2026 Movatter.jp