[Checkins] [zopefoundation/persistent] b7846d: Avoid raising a SystemError when clearing slots if...
GitHub
noreply at github.com
Mon Mar 20 13:11:32 CET 2017
Branch: refs/heads/jam-systemerror
Home: https://github.com/zopefoundation/persistent
Commit: b7846d4550ebefe7c08722c127c9d5f01cb69c4f
https://github.com/zopefoundation/persistent/commit/b7846d4550ebefe7c08722c127c9d5f01cb69c4f
Author: Jason Madden <jamadden at gmail.com>
Date: 2017-03-20 (Mon, 20 Mar 2017)
Changed paths:
M CHANGES.rst
M persistent/cPersistence.c
M persistent/tests/test_persistence.py
Log Message:
-----------
Avoid raising a SystemError when clearing slots if setstate() failed.
PR #52 introduced a code path to `ghostify` that calls PyErr_Clear()
with the intent to avoid propagating AttributeErrors for slots.
However, if there is an error (like a POSKeyError) raised by
jar.setstate(), then `unghostify` will call ghostify with an error
pending. If the object had slots that weren't set and the
AttributeError was cleared, so was the pending error from setstate. So
when `ghostify` returned NULL that got propagated up to the
interpreter which finds no exception and so raises `SystemError: error
return without exception set`.
This commit makes `unghostify` save and restore the exception state
around the call to PyErr_Clear.
More information about the checkins
mailing list