From 616f44f3c2d07af7df50ddd4e9bd391b368eafe2 Mon Sep 17 00:00:00 2001 From: Luke Lovett Date: Tue, 17 Nov 2015 11:23:56 -0800 Subject: [PATCH] PYTHON-1013 - Only reraise PyExc_Exceptions as InvalidBSON in get_value. --- bson/_cbsonmodule.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/bson/_cbsonmodule.c b/bson/_cbsonmodule.c index ada7bee0f..350c35d98 100644 --- a/bson/_cbsonmodule.c +++ b/bson/_cbsonmodule.c @@ -2105,27 +2105,29 @@ static PyObject* get_value(PyObject* self, const char* buffer, unsigned* positio * Calling _error clears the error state, so fetch it first. */ PyErr_Fetch(&etype, &evalue, &etrace); - InvalidBSON = _error("InvalidBSON"); - if (InvalidBSON) { - if (!PyErr_GivenExceptionMatches(etype, InvalidBSON)) { - /* - * Raise InvalidBSON(str(e)). - */ - Py_DECREF(etype); - etype = InvalidBSON; + if (PyErr_GivenExceptionMatches(etype, PyExc_Exception)) { + InvalidBSON = _error("InvalidBSON"); + if (InvalidBSON) { + if (!PyErr_GivenExceptionMatches(etype, InvalidBSON)) { + /* + * Raise InvalidBSON(str(e)). + */ + Py_DECREF(etype); + etype = InvalidBSON; - if (evalue) { - PyObject *msg = PyObject_Str(evalue); - Py_DECREF(evalue); - evalue = msg; + if (evalue) { + PyObject *msg = PyObject_Str(evalue); + Py_DECREF(evalue); + evalue = msg; + } + PyErr_NormalizeException(&etype, &evalue, &etrace); + } else { + /* + * The current exception matches InvalidBSON, so we don't + * need this reference after all. + */ + Py_DECREF(InvalidBSON); } - PyErr_NormalizeException(&etype, &evalue, &etrace); - } else { - /* - * The current exception matches InvalidBSON, so we don't need - * this reference after all. - */ - Py_DECREF(InvalidBSON); } } /* Steals references to args. */