From 7343f1c40eafa3f1696c34eeda57ff5a416520d6 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sat, 1 Aug 2020 22:25:16 -0400 Subject: Check return value of asprintf On GNU, asprintf leaves the destination pointer undefined on failure. Clowns. --- scoop.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/scoop.c b/scoop.c index c71e99d..c2a49b8 100644 --- a/scoop.c +++ b/scoop.c @@ -535,10 +535,10 @@ int main(int argc, char *argv[]) { err(EX_UNAVAILABLE, "sqlite3"); } - sqlite3_stmt *stmt; + int len; char *query = NULL; if (sort) { - asprintf( + len = asprintf( &query, SQL( WITH results AS (%s %s %s) @@ -548,10 +548,11 @@ int main(int argc, char *argv[]) { select, from, where, (group ? "network, context," : "") ); } else { - asprintf(&query, "%s %s %s;", select, from, where); + len = asprintf(&query, "%s %s %s;", select, from, where); } - if (!query) err(EX_OSERR, "asprintf"); - stmt = dbPrepare(query); + if (len < 0) err(EX_OSERR, "asprintf"); + + sqlite3_stmt *stmt = dbPrepare(query); free(query); for (int i = 0; i < n; ++i) { -- cgit 1.4.1