diff --git a/funcs/func_odbc.c b/funcs/func_odbc.c
index 23cc4f843ac3e4b49cf379175c695a659b644433..e0f4eb3020e8a026c442499cf8ba5199f05f658e 100644
--- a/funcs/func_odbc.c
+++ b/funcs/func_odbc.c
@@ -376,6 +376,8 @@ static int acf_odbc_read(struct ast_channel *chan, const char *cmd, char *s, cha
 		return -1;
 	}
 
+	ast_str_reset(colnames);
+
 	AST_RWLIST_RDLOCK(&queries);
 	AST_RWLIST_TRAVERSE(&queries, query, list) {
 		if (!strcmp(query->acf->name, cmd)) {
@@ -531,6 +533,7 @@ static int acf_odbc_read(struct ast_channel *chan, const char *cmd, char *s, cha
 					colnames->str[colnames->used++] = colname[i];
 
 					if (colname[i] == '\0') {
+						colnames->used--;
 						break;
 					}
 				}