• Jason Madden's avatar
    Avoid raising a SystemError when clearing slots if setstate() failed. · e8b9c8e9
    Jason Madden authored
    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.
    e8b9c8e9
test_persistence.py 66.6 KB