diff options
author | Trumeet <yuuta@yuuta.moe> | 2022-04-01 21:45:35 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2022-04-01 21:45:35 -0700 |
commit | 8da88d6a9b6e01d72527d8d7d65c6f2104026a87 (patch) | |
tree | a734f81d424b40c2b0f625cc81a1d821b0b0cb1a | |
parent | 395fa06de8db327dc75b07344b7699fcd409e10c (diff) | |
download | ksyxbot-8da88d6a9b6e01d72527d8d7d65c6f2104026a87.tar ksyxbot-8da88d6a9b6e01d72527d8d7d65c6f2104026a87.tar.gz ksyxbot-8da88d6a9b6e01d72527d8d7d65c6f2104026a87.tar.bz2 ksyxbot-8da88d6a9b6e01d72527d8d7d65c6f2104026a87.zip |
Fix illegal free() when error
-rw-r--r-- | query.c | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -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; } |