From 37d10ae65d49cb36b1f21bbd3b591d2036b481fc Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 5 Apr 2017 08:46:38 -0400 Subject: [PATCH] TT#14211 fix sql queries getting truncated on long call-ids also enabled gcc optimizations Change-Id: I773088d6f46add6f4a54e04a61e611b5d0d8b808 (cherry picked from commit bd2ac84931f2f224f35e944941b574d76b7a1d24) --- Makefile | 2 +- medmysql.c | 36 ++++++++++++++++++++---------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 100588c..509929e 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ BIN=mediator CC := gcc GLIB_CFLAGS := `pkg-config glib-2.0 --cflags` -CFLAGS := -I/usr/include/mysql $(GLIB_CFLAGS) -g -Wall +CFLAGS := -I/usr/include/mysql $(GLIB_CFLAGS) -g -Wall -O2 #CFLAGS += -DWITH_TIME_CALC GLIB_LDFLAGS := `pkg-config glib-2.0 --libs` diff --git a/medmysql.c b/medmysql.c index b7a9a95..6d18ab9 100644 --- a/medmysql.c +++ b/medmysql.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "medmysql.h" #include "config.h" @@ -185,18 +186,18 @@ int medmysql_fetch_callids(med_callid_t **callids, u_int64_t *count) { MYSQL_RES *res; MYSQL_ROW row; - char query[1024] = ""; + /* char query[1024] = ""; */ size_t callid_size; u_int64_t i = 0; int ret = 0; *count = 0; - g_strlcpy(query, MED_CALLID_QUERY, sizeof(query)); - + /* g_strlcpy(query, MED_CALLID_QUERY, sizeof(query)); */ + /*syslog(LOG_DEBUG, "q='%s'", query);*/ - if(mysql_query_wrapper(med_handler, query, strlen(query)) != 0) + if(mysql_query_wrapper(med_handler, MED_CALLID_QUERY, strlen(MED_CALLID_QUERY)) != 0) { syslog(LOG_CRIT, "Error getting acc callids: %s", mysql_error(med_handler)); @@ -247,21 +248,24 @@ int medmysql_fetch_records(med_callid_t *callid, { MYSQL_RES *res; MYSQL_ROW row; - char query[1024] = ""; + char query[strlen(MED_FETCH_QUERY) + sizeof(callid->value) * 5 + 1]; size_t entry_size; u_int64_t i = 0; int ret = 0; + int len; *count = 0; - snprintf(query, sizeof(query), MED_FETCH_QUERY, - callid->value, - callid->value, callid->value, - callid->value, callid->value); + len = snprintf(query, sizeof(query), MED_FETCH_QUERY, + callid->value, + callid->value, callid->value, + callid->value, callid->value); + + assert(len < sizeof(query)); /* truncated - internal bug */ /*syslog(LOG_DEBUG, "q='%s'", query);*/ - if(mysql_query_wrapper(med_handler, query, strlen(query)) != 0) + if(mysql_query_wrapper(med_handler, query, len) != 0) { syslog(LOG_CRIT, "Error getting acc records for callid '%s': %s", callid->value, mysql_error(med_handler)); @@ -600,12 +604,12 @@ int medmysql_load_maps(GHashTable *ip_table, GHashTable *host_table, GHashTable MYSQL_RES *res; MYSQL_ROW row; int ret = 0; - char query[1024] = ""; + /* char query[1024] = ""; */ - snprintf(query, sizeof(query), MED_LOAD_PEER_QUERY); + /* snprintf(query, sizeof(query), MED_LOAD_PEER_QUERY); */ /* syslog(LOG_DEBUG, "q='%s'", query); */ - if(mysql_query_wrapper(prov_handler, query, strlen(query)) != 0) + if(mysql_query_wrapper(prov_handler, MED_LOAD_PEER_QUERY, strlen(MED_LOAD_PEER_QUERY)) != 0) { syslog(LOG_CRIT, "Error loading peer hosts: %s", mysql_error(prov_handler)); @@ -652,14 +656,14 @@ int medmysql_load_uuids(GHashTable *uuid_table) MYSQL_RES *res; MYSQL_ROW row; int ret = 0; - char query[1024] = ""; + /* char query[1024] = ""; */ gpointer key; char *provider_id; - snprintf(query, sizeof(query), MED_LOAD_UUID_QUERY); + /* snprintf(query, sizeof(query), MED_LOAD_UUID_QUERY); */ /* syslog(LOG_DEBUG, "q='%s'", query); */ - if(mysql_query_wrapper(prov_handler, query, strlen(query)) != 0) + if(mysql_query_wrapper(prov_handler, MED_LOAD_UUID_QUERY, strlen(MED_LOAD_UUID_QUERY)) != 0) { syslog(LOG_CRIT, "Error loading uuids: %s", mysql_error(prov_handler));