diff --git a/configure.ac b/configure.ac index a82e721..c256805 100644 --- a/configure.ac +++ b/configure.ac @@ -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], diff --git a/src/libmdb/catalog.c b/src/libmdb/catalog.c index 8f3d5a0..af1dd4f 100644 --- a/src/libmdb/catalog.c +++ b/src/libmdb/catalog.c @@ -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; diff --git a/src/libmdb/data.c b/src/libmdb/data.c index bf0a6f6..1fddee8 100644 --- a/src/libmdb/data.c +++ b/src/libmdb/data.c @@ -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; diff --git a/src/libmdb/dump.c b/src/libmdb/dump.c index 0ff97f9..050c362 100644 --- a/src/libmdb/dump.c +++ b/src/libmdb/dump.c @@ -19,22 +19,24 @@ #include #include #include +#include #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; jnum_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; ilen; i++) diff --git a/src/libmdb/map.c b/src/libmdb/map.c index 5182ffe..a7e32d0 100644 --- a/src/libmdb/map.c +++ b/src/libmdb/map.c @@ -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; diff --git a/src/libmdb/table.c b/src/libmdb/table.c index f881756..1e2661c 100644 --- a/src/libmdb/table.c +++ b/src/libmdb/table.c @@ -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; itemp_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; diff --git a/src/libmdb/write.c b/src/libmdb/write.c index 1a6f455..93ea10f 100644 --- a/src/libmdb/write.c +++ b/src/libmdb/write.c @@ -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;inum_cols;i++) { col = g_ptr_array_index(table->columns,i); diff --git a/src/sql/mdbsql.c b/src/sql/mdbsql.c index e5b8b95..24f428f 100644 --- a/src/sql/mdbsql.c +++ b/src/sql/mdbsql.c @@ -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; ilen; 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; ilen; i++) { MdbSQLTable *t = (MdbSQLTable *)g_ptr_array_index(tables, i); diff --git a/src/util/mdb-export.c b/src/util/mdb-export.c index 4f905a9..977c03d 100755 --- a/src/util/mdb-export.c +++ b/src/util/mdb-export.c @@ -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. diff --git a/src/util/mdb-sql.c b/src/util/mdb-sql.c index 28c8c3e..0279df3 100644 --- a/src/util/mdb-sql.c +++ b/src/util/mdb-sql.c @@ -291,7 +291,7 @@ dump_results_pp(FILE *out, MdbSQL *sql) if (headers) { for (j=0;jnum_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); }