diff --git a/src/lib.rs b/src/lib.rs index 357c1a91..ce698ace 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -280,6 +280,7 @@ fn raise_dumps_exception_dynamic(err: &String) -> *mut PyObject { PyErr_NormalizeException(&mut tp, &mut val, &mut traceback); if !cause_tp.is_null() { + PyErr_NormalizeException(&mut cause_tp, &mut cause_val, &mut cause_traceback); PyException_SetCause(val, cause_val); Py_DECREF(cause_tp); } diff --git a/test/test_error.py b/test/test_error.py index 08d226ba..c7e09959 100644 --- a/test/test_error.py +++ b/test/test_error.py @@ -183,3 +183,9 @@ def test_dumps_chain_default_customerror(self): assert exc_info.type == orjson.JSONEncodeError assert isinstance(exc_info.value.__cause__, CustomException) assert str(exc_info.value.__cause__) == CUSTOM_ERROR_MESSAGE + + def test_dumps_normalize_exception(self): + with pytest.raises(orjson.JSONEncodeError) as exc_info: + orjson.dumps(10**60) + assert exc_info.type == orjson.JSONEncodeError + assert isinstance(exc_info.value.__cause__, OverflowError)