Fix all sign-compare warnings

Also flip on -Wsign-compare in the default configuration
This commit is contained in:
Evan Miller 2020-08-09 16:15:20 -04:00
parent 99099cdada
commit c93156626c
11 changed files with 55 additions and 46 deletions

View File

@ -68,7 +68,7 @@ AM_CONDITIONAL(SQL, test x$sql = xtrue)
AC_SUBST(SQL) AC_SUBST(SQL)
AC_SUBST(LFLAGS) AC_SUBST(LFLAGS)
CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -Werror" CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -Wsign-compare -Werror"
AS_CASE([$host], AS_CASE([$host],
[*mingw*|*cygwin*], [LDFLAGS="$LDFLAGS -no-undefined"], []) [*mingw*|*cygwin*], [LDFLAGS="$LDFLAGS -no-undefined"], [])
AS_CASE([$host], AS_CASE([$host],

View File

@ -48,7 +48,7 @@ static char *type_name[] = {"Form",
void mdb_free_catalog(MdbHandle *mdb) void mdb_free_catalog(MdbHandle *mdb)
{ {
unsigned int i, j; int i, j;
MdbCatalogEntry *entry; MdbCatalogEntry *entry;
if ((!mdb) || (!mdb->catalog)) return; if ((!mdb) || (!mdb->catalog)) return;
@ -77,7 +77,7 @@ GPtrArray *mdb_read_catalog (MdbHandle *mdb, int objtype)
char obj_flags[256]; char obj_flags[256];
char obj_props[MDB_BIND_SIZE]; char obj_props[MDB_BIND_SIZE];
int type; int type;
unsigned int i; int i;
MdbColumn *col_props; MdbColumn *col_props;
int kkd_size_ole; int kkd_size_ole;

View File

@ -288,6 +288,10 @@ int mdb_read_row(MdbTableDef *table, unsigned int row)
fprintf(stderr, "warning: mdb_find_row failed.\n"); fprintf(stderr, "warning: mdb_find_row failed.\n");
return 0; return 0;
} }
if (row_size == 0) {
fprintf(stderr, "warning: row_size = 0.\n");
return 0;
}
delflag = lookupflag = 0; delflag = lookupflag = 0;
if (row_start & 0x8000) lookupflag++; if (row_start & 0x8000) lookupflag++;
@ -304,8 +308,7 @@ int mdb_read_row(MdbTableDef *table, unsigned int row)
return 0; return 0;
} }
num_fields = mdb_crack_row(table, row_start, row_start + row_size - 1, num_fields = mdb_crack_row(table, row_start, row_size, fields);
fields);
if (num_fields < 0) if (num_fields < 0)
return 0; return 0;
if (!mdb_test_sargs(table, fields, num_fields)) return 0; if (!mdb_test_sargs(table, fields, num_fields)) return 0;
@ -371,7 +374,7 @@ int mdb_read_next_dpg(MdbTableDef *table)
} }
table->cur_phys_pg = next_pg; table->cur_phys_pg = next_pg;
if (mdb->pg_buf[0]==MDB_PAGE_DATA && mdb_get_int32(mdb->pg_buf, 4)==entry->table_pg) if (mdb->pg_buf[0]==MDB_PAGE_DATA && mdb_get_int32(mdb->pg_buf, 4)==(long)entry->table_pg)
return table->cur_phys_pg; return table->cur_phys_pg;
/* On rare occasion, mdb_map_find_next will return a wrong page */ /* On rare occasion, mdb_map_find_next will return a wrong page */
@ -386,7 +389,7 @@ int mdb_read_next_dpg(MdbTableDef *table)
do { do {
if (!mdb_read_pg(mdb, table->cur_phys_pg++)) if (!mdb_read_pg(mdb, table->cur_phys_pg++))
return 0; return 0;
} while (mdb->pg_buf[0]!=MDB_PAGE_DATA || mdb_get_int32(mdb->pg_buf, 4)!=entry->table_pg); } while (mdb->pg_buf[0]!=MDB_PAGE_DATA || mdb_get_int32(mdb->pg_buf, 4)!=(long)entry->table_pg);
/* fprintf(stderr,"returning new page %ld\n", table->cur_phys_pg); */ /* fprintf(stderr,"returning new page %ld\n", table->cur_phys_pg); */
return table->cur_phys_pg; return table->cur_phys_pg;
} }
@ -426,8 +429,7 @@ mdb_fetch_row(MdbTableDef *table)
fmt->row_count_offset); fmt->row_count_offset);
if (table->cur_row >= rows) { if (table->cur_row >= rows) {
table->cur_row = 0; table->cur_row = 0;
table->cur_pg_num++; if (++table->cur_pg_num > (unsigned int)pages->len)
if (table->cur_pg_num > pages->len)
return 0; return 0;
} }
memcpy(mdb->pg_buf, memcpy(mdb->pg_buf,
@ -539,7 +541,7 @@ mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr)
return len - 4; return len - 4;
} }
size_t size_t
mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size) mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, size_t chunk_size)
{ {
guint32 ole_len; guint32 ole_len;
void *buf; void *buf;

View File

@ -19,22 +19,24 @@
#include <ctype.h> #include <ctype.h>
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include <inttypes.h>
#ifdef DMALLOC #ifdef DMALLOC
#include "dmalloc.h" #include "dmalloc.h"
#endif #endif
void mdb_buffer_dump(const void* buf, int start, size_t len) void mdb_buffer_dump(const void* buf, off_t start, size_t len)
{ {
char asc[20]; char asc[20];
int j, k; size_t j;
int k = 0;
memset(asc, 0, sizeof(asc)); memset(asc, 0, sizeof(asc));
k = 0; k = 0;
for (j=start; j<start+len; j++) { for (j=0; j<len; j++) {
unsigned int c = ((const unsigned char *)(buf))[j]; unsigned int c = ((const unsigned char *)(buf))[start+j];
if (k == 0) { if (k == 0) {
fprintf(stdout, "%04x ", j); fprintf(stdout, "%04" PRIu64 "x ", (uint64_t)(start+j));
} }
fprintf(stdout, "%02x ", (unsigned char)c); fprintf(stdout, "%02x ", (unsigned char)c);
asc[k] = isprint(c) ? c : '.'; asc[k] = isprint(c) ? c : '.';
@ -48,11 +50,11 @@ void mdb_buffer_dump(const void* buf, int start, size_t len)
k = 0; k = 0;
} }
} }
for (j=k; j<16; j++) {
fprintf(stdout, " ");
}
if (k < 8) { if (k < 8) {
fprintf(stdout, " "); fprintf(stdout, " ");
} }
for (; k<16; k++) {
fprintf(stdout, " ");
}
fprintf(stdout, " %s\n", asc); fprintf(stdout, " %s\n", asc);
} }

View File

@ -306,7 +306,7 @@ mdb_read_indices(MdbTableDef *table)
/* look for index number i */ /* look for index number i */
for (j=0; j<table->num_idxs; ++j) { for (j=0; j<table->num_idxs; ++j) {
pidx = g_ptr_array_index (table->indices, j); pidx = g_ptr_array_index (table->indices, j);
if (pidx->index_type!=2 && pidx->index_num==i) if (pidx->index_type!=2 && (unsigned int)pidx->index_num==i)
break; break;
} }
if (j==table->num_idxs) { if (j==table->num_idxs) {
@ -1132,7 +1132,7 @@ mdb_index_scan_free(MdbTableDef *table)
void mdb_free_indices(GPtrArray *indices) void mdb_free_indices(GPtrArray *indices)
{ {
unsigned int i; int i;
if (!indices) return; if (!indices) return;
for (i=0; i<indices->len; i++) for (i=0; i<indices->len; i++)

View File

@ -108,7 +108,7 @@ mdb_map_find_next_freepage(MdbTableDef *table, int row_size)
{ {
MdbCatalogEntry *entry = table->entry; MdbCatalogEntry *entry = table->entry;
MdbHandle *mdb = entry->mdb; MdbHandle *mdb = entry->mdb;
guint32 pgnum; gint32 pgnum;
guint32 cur_pg = 0; guint32 cur_pg = 0;
int free_space; int free_space;

View File

@ -47,7 +47,7 @@ void mdb_free_tabledef(MdbTableDef *table)
{ {
if (!table) return; if (!table) return;
if (table->is_temp_table) { if (table->is_temp_table) {
unsigned int i; int i;
/* Temp table pages are being stored in memory */ /* Temp table pages are being stored in memory */
for (i=0; i<table->temp_table_pages->len; i++) for (i=0; i<table->temp_table_pages->len; i++)
g_free(g_ptr_array_index(table->temp_table_pages,i)); g_free(g_ptr_array_index(table->temp_table_pages,i));
@ -68,7 +68,7 @@ MdbTableDef *mdb_read_table(MdbCatalogEntry *entry)
MdbFormatConstants *fmt = mdb->fmt; MdbFormatConstants *fmt = mdb->fmt;
int row_start, pg_row; int row_start, pg_row;
void *buf, *pg_buf = mdb->pg_buf; void *buf, *pg_buf = mdb->pg_buf;
guint i; int i;
mdb_read_pg(mdb, entry->table_pg); mdb_read_pg(mdb, entry->table_pg);
if (mdb_get_byte(pg_buf, 0) != 0x02) /* not a valid table def page */ if (mdb_get_byte(pg_buf, 0) != 0x02) /* not a valid table def page */
@ -173,7 +173,7 @@ read_pg_if_n(MdbHandle *mdb, void *buf, int *cur_pos, size_t len)
*cur_pos -= (mdb->fmt->pg_size - 8); *cur_pos -= (mdb->fmt->pg_size - 8);
} }
/* Copy pages into buffer */ /* Copy pages into buffer */
while (*cur_pos + len >= mdb->fmt->pg_size) { while (*cur_pos + len >= (size_t)mdb->fmt->pg_size) {
int piece_len = mdb->fmt->pg_size - *cur_pos; int piece_len = mdb->fmt->pg_size - *cur_pos;
if (_buf) { if (_buf) {
memcpy(_buf, mdb->pg_buf + *cur_pos, piece_len); memcpy(_buf, mdb->pg_buf + *cur_pos, piece_len);
@ -198,7 +198,7 @@ void mdb_append_column(GPtrArray *columns, MdbColumn *in_col)
} }
void mdb_free_columns(GPtrArray *columns) void mdb_free_columns(GPtrArray *columns)
{ {
unsigned int i, j; int i, j;
MdbColumn *col; MdbColumn *col;
if (!columns) return; if (!columns) return;
@ -220,7 +220,8 @@ GPtrArray *mdb_read_columns(MdbTableDef *table)
MdbFormatConstants *fmt = mdb->fmt; MdbFormatConstants *fmt = mdb->fmt;
MdbColumn *pcol; MdbColumn *pcol;
unsigned char *col; unsigned char *col;
unsigned int i, j; unsigned int i;
int j;
int cur_pos; int cur_pos;
size_t name_sz; size_t name_sz;
GPtrArray *allprops; GPtrArray *allprops;

View File

@ -113,7 +113,8 @@ mdb_is_col_indexed(MdbTableDef *table, int colnum)
} }
static int static int
mdb_crack_row4(MdbHandle *mdb, int row_start, int row_end, unsigned int bitmask_sz, unsigned int row_var_cols, unsigned int *var_col_offsets) mdb_crack_row4(MdbHandle *mdb, unsigned int row_start, unsigned int row_end,
unsigned int bitmask_sz, unsigned int row_var_cols, unsigned int *var_col_offsets)
{ {
unsigned int i; unsigned int i;
@ -128,7 +129,8 @@ mdb_crack_row4(MdbHandle *mdb, int row_start, int row_end, unsigned int bitmask_
return 1; return 1;
} }
static int static int
mdb_crack_row3(MdbHandle *mdb, int row_start, int row_end, unsigned int bitmask_sz, unsigned int row_var_cols, unsigned int *var_col_offsets) mdb_crack_row3(MdbHandle *mdb, unsigned int row_start, unsigned int row_end,
unsigned int bitmask_sz, unsigned int row_var_cols, unsigned int *var_col_offsets)
{ {
unsigned int i; unsigned int i;
unsigned int num_jumps = 0, jumps_used = 0; unsigned int num_jumps = 0, jumps_used = 0;
@ -177,7 +179,7 @@ mdb_crack_row3(MdbHandle *mdb, int row_start, int row_end, unsigned int bitmask_
* Return value: number of fields present, or -1 if the buffer is invalid. * Return value: number of fields present, or -1 if the buffer is invalid.
*/ */
int int
mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields) mdb_crack_row(MdbTableDef *table, int row_start, size_t row_size, MdbField *fields)
{ {
MdbColumn *col; MdbColumn *col;
MdbCatalogEntry *entry = table->entry; MdbCatalogEntry *entry = table->entry;
@ -190,9 +192,10 @@ mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
unsigned int fixed_cols_found, row_fixed_cols; unsigned int fixed_cols_found, row_fixed_cols;
unsigned int col_count_size; unsigned int col_count_size;
unsigned int i; unsigned int i;
unsigned int row_end = row_start + row_size - 1;
if (mdb_get_option(MDB_DEBUG_ROW)) { if (mdb_get_option(MDB_DEBUG_ROW)) {
mdb_buffer_dump(pg_buf, row_start, row_end - row_start + 1); mdb_buffer_dump(pg_buf, row_start, row_size);
} }
if (IS_JET3(mdb)) { if (IS_JET3(mdb)) {
@ -274,7 +277,7 @@ mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
fields[i].siz = 0; fields[i].siz = 0;
fields[i].is_null = 1; fields[i].is_null = 1;
} }
if (fields[i].start + fields[i].siz > row_end + 1) { if ((size_t)(fields[i].start + fields[i].siz) > row_start + row_size) {
fprintf(stderr, "warning: Invalid data location detected in mdb_crack_row.\n"); fprintf(stderr, "warning: Invalid data location detected in mdb_crack_row.\n");
g_free(var_col_offsets); g_free(var_col_offsets);
return -1; return -1;
@ -580,7 +583,7 @@ mdb_insert_row(MdbTableDef *table, int num_fields, MdbField *fields)
MdbCatalogEntry *entry = table->entry; MdbCatalogEntry *entry = table->entry;
MdbHandle *mdb = entry->mdb; MdbHandle *mdb = entry->mdb;
MdbFormatConstants *fmt = mdb->fmt; MdbFormatConstants *fmt = mdb->fmt;
guint32 pgnum; gint32 pgnum;
guint16 rownum; guint16 rownum;
if (!mdb->f->writable) { if (!mdb->f->writable) {
@ -682,15 +685,15 @@ mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_siz
int int
mdb_update_row(MdbTableDef *table) mdb_update_row(MdbTableDef *table)
{ {
int row_start, row_end; int row_start, row_end;
unsigned int i; unsigned int i;
MdbColumn *col; MdbColumn *col;
MdbCatalogEntry *entry = table->entry; MdbCatalogEntry *entry = table->entry;
MdbHandle *mdb = entry->mdb; MdbHandle *mdb = entry->mdb;
MdbField fields[256]; MdbField fields[256];
unsigned char row_buffer[4096]; unsigned char row_buffer[4096];
size_t old_row_size, new_row_size; size_t old_row_size, new_row_size;
unsigned int num_fields; int num_fields;
if (!mdb->f->writable) { if (!mdb->f->writable) {
fprintf(stderr, "File is not open for writing\n"); fprintf(stderr, "File is not open for writing\n");
@ -719,9 +722,10 @@ unsigned int num_fields;
} }
if (mdb_get_option(MDB_DEBUG_WRITE)) { if (mdb_get_option(MDB_DEBUG_WRITE)) {
/*
for (i=0;i<num_fields;i++) { for (i=0;i<num_fields;i++) {
//printf("col %d %d start %d siz %d fixed 5d\n", i, fields[i].colnum, fields[i].start, fields[i].siz, fields[i].is_fixed); printf("col %d %d start %d siz %d fixed 5d\n", i, fields[i].colnum, fields[i].start, fields[i].siz, fields[i].is_fixed);
} } */
} }
for (i=0;i<table->num_cols;i++) { for (i=0;i<table->num_cols;i++) {
col = g_ptr_array_index(table->columns,i); col = g_ptr_array_index(table->columns,i);

View File

@ -145,7 +145,7 @@ void mdb_sql_set_maxrow(MdbSQL *sql, int maxrow)
static void mdb_sql_free_columns(GPtrArray *columns) static void mdb_sql_free_columns(GPtrArray *columns)
{ {
unsigned int i; int i;
if (!columns) return; if (!columns) return;
for (i=0; i<columns->len; i++) { for (i=0; i<columns->len; i++) {
MdbSQLColumn *c = (MdbSQLColumn *)g_ptr_array_index(columns, i); MdbSQLColumn *c = (MdbSQLColumn *)g_ptr_array_index(columns, i);
@ -156,7 +156,7 @@ static void mdb_sql_free_columns(GPtrArray *columns)
} }
static void mdb_sql_free_tables(GPtrArray *tables) static void mdb_sql_free_tables(GPtrArray *tables)
{ {
unsigned int i; int i;
if (!tables) return; if (!tables) return;
for (i=0; i<tables->len; i++) { for (i=0; i<tables->len; i++) {
MdbSQLTable *t = (MdbSQLTable *)g_ptr_array_index(tables, i); MdbSQLTable *t = (MdbSQLTable *)g_ptr_array_index(tables, i);

View File

@ -227,7 +227,7 @@ main(int argc, char **argv)
// TODO refactor this into functions // TODO refactor this into functions
if (mdb->default_backend->capabilities & MDB_SHEXP_BULK_INSERT) { if (mdb->default_backend->capabilities & MDB_SHEXP_BULK_INSERT) {
//for efficiency do multi row insert on engines that support this //for efficiency do multi row insert on engines that support this
unsigned int counter = 0; int counter = 0;
while (mdb_fetch_row(table)) { while (mdb_fetch_row(table)) {
if (counter % batch_size == 0) { if (counter % batch_size == 0) {
counter = 0; // reset to 0, prevent overflow on extremely large data sets. counter = 0; // reset to 0, prevent overflow on extremely large data sets.

View File

@ -291,7 +291,7 @@ dump_results_pp(FILE *out, MdbSQL *sql)
if (headers) { if (headers) {
for (j=0;j<sql->num_columns;j++) { for (j=0;j<sql->num_columns;j++) {
sqlcol = g_ptr_array_index(sql->columns,j); sqlcol = g_ptr_array_index(sql->columns,j);
if (strlen(sqlcol->name)>sqlcol->disp_size) if (strlen(sqlcol->name)>(size_t)sqlcol->disp_size)
sqlcol->disp_size = strlen(sqlcol->name); sqlcol->disp_size = strlen(sqlcol->name);
print_break(out, sqlcol->disp_size, !j); print_break(out, sqlcol->disp_size, !j);
} }