diff --git a/cdr/cdr_adaptive_odbc.c b/cdr/cdr_adaptive_odbc.c index a8f1177b10..7b5b8dc74d 100644 --- a/cdr/cdr_adaptive_odbc.c +++ b/cdr/cdr_adaptive_odbc.c @@ -316,7 +316,7 @@ static SQLHSTMT generic_prepare(struct odbc_obj *obj, void *data) #define LENGTHEN_BUF1(size) \ do { \ /* Lengthen buffer, if necessary */ \ - if (ast_str_strlen(sql) + size + 1 > ast_str_size(sql)) { \ + if (ast_str_strlen(sql) + size + 1 > ast_str_size(sql)) { \ if (ast_str_make_space(&sql, ((ast_str_size(sql) + size + 1) / 512 + 1) * 512) != 0) { \ ast_log(LOG_ERROR, "Unable to allocate sufficient memory. Insert CDR '%s:%s' failed.\n", tableptr->connection, tableptr->table); \ ast_free(sql); \ @@ -329,7 +329,7 @@ static SQLHSTMT generic_prepare(struct odbc_obj *obj, void *data) #define LENGTHEN_BUF2(size) \ do { \ - if (ast_str_strlen(sql2) + size + 1 > ast_str_size(sql2)) { \ + if (ast_str_strlen(sql2) + size + 1 > ast_str_size(sql2)) { \ if (ast_str_make_space(&sql2, ((ast_str_size(sql2) + size + 3) / 512 + 1) * 512) != 0) { \ ast_log(LOG_ERROR, "Unable to allocate sufficient memory. Insert CDR '%s:%s' failed.\n", tableptr->connection, tableptr->table); \ ast_free(sql); \ @@ -459,7 +459,9 @@ static int odbc_log(struct ast_cdr *cdr) ast_str_append(&sql2, 0, "'"); break; case SQL_TYPE_DATE: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { int year = 0, month = 0, day = 0; if (sscanf(colptr, "%4d-%2d-%2d", &year, &month, &day) != 3 || year <= 0 || month <= 0 || month > 12 || day < 0 || day > 31 || @@ -482,7 +484,9 @@ static int odbc_log(struct ast_cdr *cdr) } break; case SQL_TYPE_TIME: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { int hour = 0, minute = 0, second = 0; int count = sscanf(colptr, "%2d:%2d:%2d", &hour, &minute, &second); @@ -498,7 +502,9 @@ static int odbc_log(struct ast_cdr *cdr) break; case SQL_TYPE_TIMESTAMP: case SQL_TIMESTAMP: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0; int count = sscanf(colptr, "%4d-%2d-%2d %2d:%2d:%2d", &year, &month, &day, &hour, &minute, &second); @@ -524,7 +530,9 @@ static int odbc_log(struct ast_cdr *cdr) } break; case SQL_INTEGER: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { int integer = 0; if (sscanf(colptr, "%30d", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); @@ -537,7 +545,9 @@ static int odbc_log(struct ast_cdr *cdr) } break; case SQL_BIGINT: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { long long integer = 0; if (sscanf(colptr, "%30lld", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); @@ -550,7 +560,9 @@ static int odbc_log(struct ast_cdr *cdr) } break; case SQL_SMALLINT: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { short integer = 0; if (sscanf(colptr, "%30hd", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); @@ -563,7 +575,9 @@ static int odbc_log(struct ast_cdr *cdr) } break; case SQL_TINYINT: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { char integer = 0; if (sscanf(colptr, "%30hhd", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); @@ -576,7 +590,9 @@ static int odbc_log(struct ast_cdr *cdr) } break; case SQL_BIT: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { char integer = 0; if (sscanf(colptr, "%30hhd", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); @@ -592,7 +608,9 @@ static int odbc_log(struct ast_cdr *cdr) break; case SQL_NUMERIC: case SQL_DECIMAL: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { double number = 0.0; if (sscanf(colptr, "%30lf", &number) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an numeric type.\n", entry->name); @@ -607,7 +625,9 @@ static int odbc_log(struct ast_cdr *cdr) case SQL_FLOAT: case SQL_REAL: case SQL_DOUBLE: - { + if (ast_strlen_zero(colptr)) { + continue; + } else { double number = 0.0; if (sscanf(colptr, "%30lf", &number) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an numeric type.\n", entry->name);