]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_voicemail: Use ast_asprintf to create mailbox SQL query
authorGeorge Joseph <gjoseph@sangoma.com>
Tue, 3 Sep 2024 19:07:13 +0000 (13:07 -0600)
committerGeorge Joseph <gjoseph@sangoma.com>
Wed, 4 Sep 2024 15:59:56 +0000 (15:59 +0000)
...instead of trying to calculate the length of the buffer needed
manually.

apps/app_voicemail.c

index 32a5e66a7d9ce7121cc658be6e4be02fdbd4ac5d..a15470e0f2fcd2663321d98bb4ad9cc077c284a7 100644 (file)
@@ -6261,12 +6261,14 @@ static int messagecount(const char *mailbox_id, const char *folder)
        }
 
        if (!strcmp(folder, "INBOX")) {
-               gps.sql = ast_alloca(sizeof(MSGCOUNT_SQL_FMT_INBOX) + odbc_table_len + (strlen(VM_SPOOL_DIR) + strlen(context) + strlen(mailbox) * 2));
-               sprintf(gps.sql, MSGCOUNT_SQL_FMT_INBOX, odbc_table, VM_SPOOL_DIR, context, mailbox, VM_SPOOL_DIR, context, mailbox); /* Safe */
+               res = ast_asprintf(&gps.sql, MSGCOUNT_SQL_FMT_INBOX, odbc_table, VM_SPOOL_DIR, context, mailbox, VM_SPOOL_DIR, context, mailbox);
        } else {
-               gps.sql = ast_alloca(sizeof(MSGCOUNT_SQL_FMT) + odbc_table_len + strlen(VM_SPOOL_DIR) + strlen(context) + strlen(mailbox) + strlen(folder));
-               sprintf(gps.sql, MSGCOUNT_SQL_FMT, odbc_table, VM_SPOOL_DIR, context, mailbox, folder); /* Safe */
+               res = ast_asprintf(&gps.sql, MSGCOUNT_SQL_FMT, odbc_table, VM_SPOOL_DIR, context, mailbox, folder);
        }
+       if (res <= 0) {
+               SCOPE_EXIT_LOG_RTN_VALUE(0, AST_LOG_WARNING, "Failed to allocate memory for SQL statement for '%s'!\n", odbc_database);
+       }
+       ast_trace(-1, "SQL: %s\n", gps.sql);
 
        stmt = ast_odbc_prepare_and_execute(obj, generic_prepare, &gps);
        if (!stmt) {
@@ -6290,6 +6292,7 @@ bail_with_handle:
 
 bail:
        ast_odbc_release_obj(obj);
+       ast_free(gps.sql);
        SCOPE_EXIT_RTN_VALUE(nummsgs, "Messages: %d\n", nummsgs);
 }
 #undef MSGCOUNT_SQL_FMT