summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-04-01 21:45:35 -0700
committerTrumeet <yuuta@yuuta.moe>2022-04-01 21:45:35 -0700
commit8da88d6a9b6e01d72527d8d7d65c6f2104026a87 (patch)
treea734f81d424b40c2b0f625cc81a1d821b0b0cb1a
parent395fa06de8db327dc75b07344b7699fcd409e10c (diff)
downloadksyxbot-8da88d6a9b6e01d72527d8d7d65c6f2104026a87.tar
ksyxbot-8da88d6a9b6e01d72527d8d7d65c6f2104026a87.tar.gz
ksyxbot-8da88d6a9b6e01d72527d8d7d65c6f2104026a87.tar.bz2
ksyxbot-8da88d6a9b6e01d72527d8d7d65c6f2104026a87.zip
Fix illegal free() when error
-rw-r--r--query.c19
1 files 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;
}