From 5fa83aeca45bd45dc78c168f5c5de7a3c2afe472 Mon Sep 17 00:00:00 2001 From: miker Date: Sat, 9 Sep 2006 00:17:44 +0000 Subject: [PATCH 1/1] failing on non-existant column instead of silently ignoring it git-svn-id: svn://svn.open-ils.org/ILS/trunk@6033 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/c-apps/oils_cstore.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Open-ILS/src/c-apps/oils_cstore.c b/Open-ILS/src/c-apps/oils_cstore.c index aa6f9b692d..5f44e40832 100644 --- a/Open-ILS/src/c-apps/oils_cstore.c +++ b/Open-ILS/src/c-apps/oils_cstore.c @@ -48,7 +48,7 @@ char* searchFieldTransformPredicate ( osrfHash*, jsonObjectNode* ); char* searchBETWEENPredicate ( osrfHash*, jsonObject* ); char* searchINPredicate ( osrfHash*, jsonObject* ); char* searchPredicate ( osrfHash*, jsonObject* ); -char* buildSELECT ( jsonObject*, jsonObject*, osrfHash* ); +char* buildSELECT ( jsonObject*, jsonObject*, osrfHash*, osrfMethodContext* ); void userDataFree( void* ); void sessionDataFree( char*, void* ); @@ -1195,7 +1195,7 @@ char* searchPredicate ( osrfHash* field, jsonObject* node ) { } -char* buildSELECT ( jsonObject* search_hash, jsonObject* order_hash, osrfHash* meta ) { +char* buildSELECT ( jsonObject* search_hash, jsonObject* order_hash, osrfHash* meta, osrfMethodContext* ctx ) { osrfHash* links = osrfHashGet(meta, "links"); osrfHash* fields = osrfHashGet(meta, "fields"); @@ -1252,7 +1252,24 @@ char* buildSELECT ( jsonObject* search_hash, jsonObject* order_hash, osrfHash* m while ( (node = jsonObjectIteratorNext( search_itr )) ) { osrfHash* field = osrfHashGet( fields, node->key ); - if (!field) continue; + if (!field) { + osrfLogError( + OSRF_LOG_MARK, + "%s: Attempt to reference non-existant column %s on table %s", + MODULENAME, + node->key, + osrfHashGet(meta, "tablename") + ); + osrfAppSessionStatus( + ctx->session, + OSRF_STATUS_INTERNALSERVERERROR, + "osrfMethodException", + ctx->request, + "Severe query error -- see error log for more details" + ); + buffer_free(sql_buf); + return NULL; + } if (first) { first = 0; @@ -1323,7 +1340,11 @@ jsonObject* doSearch ( osrfMethodContext* ctx, osrfHash* meta, jsonObject* param jsonObject* search_hash = jsonObjectGetIndex(params, 0); jsonObject* order_hash = jsonObjectGetIndex(params, 1); - char* sql = buildSELECT( search_hash, order_hash, meta ); + char* sql = buildSELECT( search_hash, order_hash, meta, ctx ); + if (!sql) { + *err = -1; + return NULL; + } osrfLogDebug(OSRF_LOG_MARK, "%s SQL = %s", MODULENAME, sql); dbi_result result = dbi_conn_query(dbhandle, sql); -- 2.43.2