From 8da88d6a9b6e01d72527d8d7d65c6f2104026a87 Mon Sep 17 00:00:00 2001 From: Trumeet Date: Fri, 1 Apr 2022 21:45:35 -0700 Subject: Fix illegal free() when error --- query.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/query.c b/query.c index 41aa1e8..cfab2bd 100644 --- a/query.c +++ b/query.c @@ -36,6 +36,7 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) { memset(results, 0, sizeof(results)); sqlite3_stmt *stmt; int r; + bool sys = false; if ((r = sqlite3_prepare_v2(db, "SELECT id, t, url FROM says ORDER BY RANDOM() LIMIT 10;", -1, @@ -49,6 +50,7 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) { results[0].title = "Error!"; results[0].text = msg; results[0].description = msg; + sys = true; goto answer; } @@ -100,6 +102,7 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) { sprintf(results[0].id, "e_nodat"); results[0].text = "No data is available. Check it out later.\n\n" "https://www.youtube.com/watch?v=dQw4w9WgXcQ"; + sys = true; } assert(results[0].title); goto answer; @@ -141,14 +144,16 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) { NULL), &cb_answer, NULL); - for (i = 0; i < sizeof(results) / sizeof(struct result); i++) { - struct result res = results[i]; - if (!res.title) { - break; + if (!sys) { + for (i = 0; i < sizeof(results) / sizeof(struct result); i++) { + struct result res = results[i]; + if (!res.title) { + break; + } + free(res.title); + if (res.url) free(res.url); + free(res.text); } - free(res.title); - if (res.url) free(res.url); - free(res.text); } return r; } -- cgit v1.2.3