From 34eba9c6fe33b53dd6ce6566cc2608799c2f1c5c Mon Sep 17 00:00:00 2001 From: Jonathan <30329245+CookStar@users.noreply.github.com> Date: Thu, 29 Jun 2023 18:07:58 +0900 Subject: [PATCH 1/2] Fixed ExtractAddress causing Segmentation fault if it received None object. --- src/core/modules/filters/filters_recipients.h | 2 +- src/core/modules/memory/memory_utilities.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/core/modules/filters/filters_recipients.h diff --git a/src/core/modules/filters/filters_recipients.h b/src/core/modules/filters/filters_recipients.h old mode 100644 new mode 100755 index 569cf1ed7..cc6d3a132 --- a/src/core/modules/filters/filters_recipients.h +++ b/src/core/modules/filters/filters_recipients.h @@ -114,7 +114,7 @@ class MRecipientFilter : public IRecipientFilter object self = cls(); object add_recipient = self.attr("add_recipient"); - IRecipientFilter *pFilter = (IRecipientFilter *)ExtractAddress(oPtr); + IRecipientFilter *pFilter = (IRecipientFilter *)ExtractAddress(oPtr, true); for (int i=0; i < pFilter->GetRecipientCount(); i++) { add_recipient(pFilter->GetRecipientIndex(i)); } diff --git a/src/core/modules/memory/memory_utilities.h b/src/core/modules/memory/memory_utilities.h index e7b43df22..85847839f 100755 --- a/src/core/modules/memory/memory_utilities.h +++ b/src/core/modules/memory/memory_utilities.h @@ -65,6 +65,9 @@ // ============================================================================ inline unsigned long ExtractAddress(object oPtr, bool bValidate = false) { + if (oPtr.is_none()) + BOOST_RAISE_EXCEPTION(PyExc_ValueError, "None was passed, expected Pointer(0) or NULL.") + CPointer* pPtr; extract extractor(oPtr); From e4b0a8017b1a1183fd5ee74b6f9da6ead82c6c86 Mon Sep 17 00:00:00 2001 From: Jonathan <30329245+CookStar@users.noreply.github.com> Date: Fri, 30 Jun 2023 07:08:21 +0900 Subject: [PATCH 2/2] Fixed the crash when _ptr() returns None. --- src/core/modules/memory/memory_utilities.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/modules/memory/memory_utilities.h b/src/core/modules/memory/memory_utilities.h index 85847839f..7a644ef01 100755 --- a/src/core/modules/memory/memory_utilities.h +++ b/src/core/modules/memory/memory_utilities.h @@ -65,9 +65,6 @@ // ============================================================================ inline unsigned long ExtractAddress(object oPtr, bool bValidate = false) { - if (oPtr.is_none()) - BOOST_RAISE_EXCEPTION(PyExc_ValueError, "None was passed, expected Pointer(0) or NULL.") - CPointer* pPtr; extract extractor(oPtr); @@ -81,6 +78,9 @@ inline unsigned long ExtractAddress(object oPtr, bool bValidate = false) pPtr = extractor(); } + if (!pPtr) + BOOST_RAISE_EXCEPTION(PyExc_ValueError, "None was passed, expected NULL or Pointer(0).") + if (bValidate) pPtr->Validate();