mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-06-28 15:39:02 +08:00
Bounds check mdb_sql_bind_column()
Return -1 if the bounds check fails, otherwise the result of mdb_bind_column_by_name. Update other places in the code to check the return value.
This commit is contained in:
parent
97e1d348f7
commit
bbc53dfade
@ -100,11 +100,11 @@ void mdb_sql_describe_table(MdbSQL *sql);
|
||||
MdbSQL* mdb_sql_run_query (MdbSQL*, const gchar*);
|
||||
void mdb_sql_set_maxrow(MdbSQL *sql, int maxrow);
|
||||
int mdb_sql_eval_expr(MdbSQL *sql, char *const1, int op, char *const2);
|
||||
void mdb_sql_bind_all(MdbSQL *sql);
|
||||
int mdb_sql_bind_all(MdbSQL *sql);
|
||||
void mdb_sql_unbind_all(MdbSQL *sql);
|
||||
int mdb_sql_fetch_row(MdbSQL *sql, MdbTableDef *table);
|
||||
int mdb_sql_add_temp_col(MdbSQL *sql, MdbTableDef *ttable, int col_num, char *name, int col_type, int col_size, int is_fixed);
|
||||
void mdb_sql_bind_column(MdbSQL *sql, int colnum, void *varaddr, int *len_ptr);
|
||||
int mdb_sql_bind_column(MdbSQL *sql, int colnum, void *varaddr, int *len_ptr);
|
||||
int mdb_sql_add_limit(MdbSQL *sql, char *limit, int percent);
|
||||
int mdb_sql_get_limit(MdbSQL *sql);
|
||||
|
||||
|
@ -1037,11 +1037,8 @@ bind_columns(struct _hstmt *stmt)
|
||||
if (stmt->rows_affected==0) {
|
||||
cur = stmt->bind_head;
|
||||
while (cur) {
|
||||
if (cur->column_number>0 &&
|
||||
cur->column_number <= stmt->sql->num_columns) {
|
||||
mdb_sql_bind_column(stmt->sql, cur->column_number,
|
||||
cur->varaddr, cur->column_lenbind);
|
||||
} else {
|
||||
if (mdb_sql_bind_column(stmt->sql, cur->column_number,
|
||||
cur->varaddr, cur->column_lenbind) == -1) {
|
||||
/* log error ? */
|
||||
}
|
||||
cur = cur->next;
|
||||
|
@ -112,7 +112,10 @@ mdb_sql_run_query (MdbSQL* sql, const gchar* querystr) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mdb_sql_bind_all (sql);
|
||||
if (mdb_sql_bind_all(sql) == -1) {
|
||||
mdb_sql_error (sql, _("Failed to bind columns for '%s' command"), querystr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return sql;
|
||||
}
|
||||
@ -871,16 +874,20 @@ int found = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
int
|
||||
mdb_sql_bind_column(MdbSQL *sql, int colnum, void *varaddr, int *len_ptr)
|
||||
{
|
||||
MdbSQLColumn *sqlcol;
|
||||
|
||||
if (colnum <= 0 || colnum > sql->num_columns)
|
||||
return -1
|
||||
|
||||
/* sql columns are traditionally 1 based, so decrement colnum */
|
||||
sqlcol = g_ptr_array_index(sql->columns,colnum - 1);
|
||||
mdb_bind_column_by_name(sql->cur_table, sqlcol->name, varaddr, len_ptr);
|
||||
return mdb_bind_column_by_name(sql->cur_table, sqlcol->name, varaddr, len_ptr);
|
||||
}
|
||||
void
|
||||
|
||||
int
|
||||
mdb_sql_bind_all(MdbSQL *sql)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -889,8 +896,12 @@ mdb_sql_bind_all(MdbSQL *sql)
|
||||
for (i=0;i<sql->num_columns;i++) {
|
||||
bound_value = g_malloc0(sql->mdb->bind_size);
|
||||
g_ptr_array_add(sql->bound_values, bound_value);
|
||||
mdb_sql_bind_column(sql, i+1, bound_value, NULL);
|
||||
if (mdb_sql_bind_column(sql, i+1, bound_value, NULL) == -1) {
|
||||
mdb_sql_unbind_all(sql);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return sql->num_columns;
|
||||
}
|
||||
|
||||
void mdb_sql_unbind_all(MdbSQL *sql)
|
||||
|
Loading…
Reference in New Issue
Block a user