From a1e6747633140d98610a0782ce09d25f52997dce Mon Sep 17 00:00:00 2001 From: scottmk Date: Wed, 18 Feb 2009 07:51:39 +0000 Subject: [PATCH] searchJOIN() was segfaulting when the FROM clause was of the form "from": { "xxx":"yyy" }. Reason: we were freeing freeable_hash prematurely. Fixed. git-svn-id: svn://svn.open-ils.org/ILS/trunk@12217 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/c-apps/oils_cstore.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Open-ILS/src/c-apps/oils_cstore.c b/Open-ILS/src/c-apps/oils_cstore.c index 9b85bd406b..cc1780870c 100644 --- a/Open-ILS/src/c-apps/oils_cstore.c +++ b/Open-ILS/src/c-apps/oils_cstore.c @@ -2028,8 +2028,6 @@ static char* searchJOIN ( const jsonObject* join_hash, osrfHash* leftmeta ) { jsonObject* snode = NULL; jsonIterator* search_itr = jsonNewIterator( working_hash ); - if(freeable_hash) - jsonObjectFree(freeable_hash); while ( (snode = jsonIteratorNext( search_itr )) ) { osrfHash* idlClass = osrfHashGet( oilsIDL(), search_itr->key ); @@ -2051,6 +2049,8 @@ static char* searchJOIN ( const jsonObject* join_hash, osrfHash* leftmeta ) { leftclass ); buffer_free(join_buf); + if(freeable_hash) + jsonObjectFree(freeable_hash); free(field); jsonIteratorFree(search_itr); return NULL; @@ -2069,6 +2069,8 @@ static char* searchJOIN ( const jsonObject* join_hash, osrfHash* leftmeta ) { class ); buffer_free(join_buf); + if(freeable_hash) + jsonObjectFree(freeable_hash); free(fkey); jsonIteratorFree(search_itr); return NULL; @@ -2115,6 +2117,8 @@ static char* searchJOIN ( const jsonObject* join_hash, osrfHash* leftmeta ) { class ); buffer_free(join_buf); + if(freeable_hash) + jsonObjectFree(freeable_hash); jsonIteratorFree(search_itr); return NULL; } @@ -2176,7 +2180,9 @@ static char* searchJOIN ( const jsonObject* join_hash, osrfHash* leftmeta ) { free(field); } - jsonIteratorFree(search_itr); + if(freeable_hash) + jsonObjectFree(freeable_hash); + jsonIteratorFree(search_itr); return buffer_release(join_buf); } -- 2.43.2