From 695569fbb5efcea5701314cb70a46638868ea93d Mon Sep 17 00:00:00 2001 From: Gaurav Date: Wed, 14 Oct 2015 16:00:15 +0530 Subject: [PATCH 1/4] Couple of Null check corrections 1. m_to_python is checked against Null at line 70, but not checked at 89. 2. !! is same as without using this. --- src/converter/registry.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/converter/registry.cpp b/src/converter/registry.cpp index aa20c3f68..9af6c20cb 100644 --- a/src/converter/registry.cpp +++ b/src/converter/registry.cpp @@ -85,10 +85,13 @@ BOOST_PYTHON_DECL PyObject* registration::to_python(void const volatile* source) throw_error_already_set(); } - - return source == 0 - ? incref(Py_None) - : this->m_to_python(const_cast(source)); + + if (this->m_to_python != 0) + { + return source == 0 + ? incref(Py_None) + : this->m_to_python(const_cast(source)); + } } namespace @@ -96,9 +99,11 @@ namespace template< typename T > void delete_node( T* node ) { - if( !!node && !!node->next ) + if( node && node->next ) + { delete_node( node->next ); - delete node; + delete node; + } } } From 32e3042a9d2fbd1ad79512c76ca1c77ffbb1fa54 Mon Sep 17 00:00:00 2001 From: Gaurav Date: Tue, 8 Dec 2015 15:56:32 +0900 Subject: [PATCH 2/4] Free node when only node->next is Null. Applied patch to free node when node->next is Null but node is Non-Null. --- src/converter/registry.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/converter/registry.cpp b/src/converter/registry.cpp index 9af6c20cb..6883db9e6 100644 --- a/src/converter/registry.cpp +++ b/src/converter/registry.cpp @@ -104,6 +104,8 @@ namespace delete_node( node->next ); delete node; } + else if( node ) + delete node; } } From c088ea26beeabd7865f1aa7829b3943dcfbec1a3 Mon Sep 17 00:00:00 2001 From: Gaurav Date: Tue, 8 Dec 2015 16:01:25 +0900 Subject: [PATCH 3/4] Avoid null pointer dereference - used else if condition modified to use else. --- src/converter/registry.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/converter/registry.cpp b/src/converter/registry.cpp index 6883db9e6..fa520efa2 100644 --- a/src/converter/registry.cpp +++ b/src/converter/registry.cpp @@ -85,8 +85,7 @@ BOOST_PYTHON_DECL PyObject* registration::to_python(void const volatile* source) throw_error_already_set(); } - - if (this->m_to_python != 0) + else { return source == 0 ? incref(Py_None) From 6e3c0b9a7fdf55271594d60dc1ab237bf0ca07b3 Mon Sep 17 00:00:00 2001 From: Gaurav Date: Wed, 9 Dec 2015 12:31:35 +0900 Subject: [PATCH 4/4] Its safe to delete NULL delete handles NULL pointer, so there is no harm in removing extra NULL checks. --- src/converter/registry.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/converter/registry.cpp b/src/converter/registry.cpp index fa520efa2..432d55a77 100644 --- a/src/converter/registry.cpp +++ b/src/converter/registry.cpp @@ -98,13 +98,9 @@ namespace template< typename T > void delete_node( T* node ) { - if( node && node->next ) - { + if (node != 0) delete_node( node->next ); - delete node; - } - else if( node ) - delete node; + delete node; } }