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(LFLAGS)
CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -Werror"
CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -Wsign-compare -Werror"
AS_CASE([$host],
[*mingw*|*cygwin*], [LDFLAGS="$LDFLAGS -no-undefined"], [])
AS_CASE([$host],

View File

@ -48,7 +48,7 @@ static char *type_name[] = {"Form",
void mdb_free_catalog(MdbHandle *mdb)
{
unsigned int i, j;
int i, j;
MdbCatalogEntry *entry;
if ((!mdb) || (!mdb->catalog)) return;
@ -77,7 +77,7 @@ GPtrArray *mdb_read_catalog (MdbHandle *mdb, int objtype)
char obj_flags[256];
char obj_props[MDB_BIND_SIZE];
int type;
unsigned int i;
int i;
MdbColumn *col_props;
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");
return 0;
}
if (row_size == 0) {
fprintf(stderr, "warning: row_size = 0.\n");
return 0;
}
delflag = lookupflag = 0;
if (row_start & 0x8000) lookupflag++;
@ -304,8 +308,7 @@ int mdb_read_row(MdbTableDef *table, unsigned int row)
return 0;
}
num_fields = mdb_crack_row(table, row_start, row_start + row_size - 1,
fields);
num_fields = mdb_crack_row(table, row_start, row_size, fields);
if (num_fields < 0)
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;
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;
/* On rare occasion, mdb_map_find_next will return a wrong page */
@ -386,7 +389,7 @@ int mdb_read_next_dpg(MdbTableDef *table)
do {
if (!mdb_read_pg(mdb, table->cur_phys_pg++))
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); */
return table->cur_phys_pg;
}
@ -426,8 +429,7 @@ mdb_fetch_row(MdbTableDef *table)
fmt->row_count_offset);
if (table->cur_row >= rows) {
table->cur_row = 0;
table->cur_pg_num++;
if (table->cur_pg_num > pages->len)
if (++table->cur_pg_num > (unsigned int)pages->len)
return 0;
}
memcpy(mdb->pg_buf,
@ -539,7 +541,7 @@ mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr)
return len - 4;
}
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;
void *buf;

View File

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

View File

@ -306,7 +306,7 @@ mdb_read_indices(MdbTableDef *table)
/* look for index number i */
for (j=0; j<table->num_idxs; ++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;
}
if (j==table->num_idxs) {
@ -1132,7 +1132,7 @@ mdb_index_scan_free(MdbTableDef *table)
void mdb_free_indices(GPtrArray *indices)
{
unsigned int i;
int i;
if (!indices) return;
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;
MdbHandle *mdb = entry->mdb;
guint32 pgnum;
gint32 pgnum;
guint32 cur_pg = 0;
int free_space;

View File

@ -47,7 +47,7 @@ void mdb_free_tabledef(MdbTableDef *table)
{
if (!table) return;
if (table->is_temp_table) {
unsigned int i;
int i;
/* Temp table pages are being stored in memory */
for (i=0; i<table->temp_table_pages->len; 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;
int row_start, pg_row;
void *buf, *pg_buf = mdb->pg_buf;
guint i;
int i;
mdb_read_pg(mdb, entry->table_pg);
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);
}
/* 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;
if (_buf) {
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)
{
unsigned int i, j;
int i, j;
MdbColumn *col;
if (!columns) return;
@ -220,7 +220,8 @@ GPtrArray *mdb_read_columns(MdbTableDef *table)
MdbFormatConstants *fmt = mdb->fmt;
MdbColumn *pcol;
unsigned char *col;
unsigned int i, j;
unsigned int i;
int j;
int cur_pos;
size_t name_sz;
GPtrArray *allprops;

View File

@ -113,7 +113,8 @@ mdb_is_col_indexed(MdbTableDef *table, int colnum)
}
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;
@ -128,7 +129,8 @@ mdb_crack_row4(MdbHandle *mdb, int row_start, int row_end, unsigned int bitmask_
return 1;
}
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 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.
*/
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;
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 col_count_size;
unsigned int i;
unsigned int row_end = row_start + row_size - 1;
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)) {
@ -274,7 +277,7 @@ mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields)
fields[i].siz = 0;
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");
g_free(var_col_offsets);
return -1;
@ -580,7 +583,7 @@ mdb_insert_row(MdbTableDef *table, int num_fields, MdbField *fields)
MdbCatalogEntry *entry = table->entry;
MdbHandle *mdb = entry->mdb;
MdbFormatConstants *fmt = mdb->fmt;
guint32 pgnum;
gint32 pgnum;
guint16 rownum;
if (!mdb->f->writable) {
@ -682,15 +685,15 @@ mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_siz
int
mdb_update_row(MdbTableDef *table)
{
int row_start, row_end;
unsigned int i;
MdbColumn *col;
MdbCatalogEntry *entry = table->entry;
MdbHandle *mdb = entry->mdb;
MdbField fields[256];
unsigned char row_buffer[4096];
int row_start, row_end;
unsigned int i;
MdbColumn *col;
MdbCatalogEntry *entry = table->entry;
MdbHandle *mdb = entry->mdb;
MdbField fields[256];
unsigned char row_buffer[4096];
size_t old_row_size, new_row_size;
unsigned int num_fields;
int num_fields;
if (!mdb->f->writable) {
fprintf(stderr, "File is not open for writing\n");
@ -719,9 +722,10 @@ unsigned int num_fields;
}
if (mdb_get_option(MDB_DEBUG_WRITE)) {
/*
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++) {
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)
{
unsigned int i;
int i;
if (!columns) return;
for (i=0; i<columns->len; 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)
{
unsigned int i;
int i;
if (!tables) return;
for (i=0; i<tables->len; 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
if (mdb->default_backend->capabilities & MDB_SHEXP_BULK_INSERT) {
//for efficiency do multi row insert on engines that support this
unsigned int counter = 0;
int counter = 0;
while (mdb_fetch_row(table)) {
if (counter % batch_size == 0) {
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) {
for (j=0;j<sql->num_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);
print_break(out, sqlcol->disp_size, !j);
}