diff --git a/src/libmdb/catalog.c b/src/libmdb/catalog.c index e4d93b4..e7fbcd1 100644 --- a/src/libmdb/catalog.c +++ b/src/libmdb/catalog.c @@ -96,15 +96,24 @@ GPtrArray *mdb_read_catalog (MdbHandle *mdb, int objtype) /* mdb_table_dump(&msysobj); */ table = mdb_read_table(&msysobj); - if (!table) return NULL; + if (!table) { + mdb_free_catalog(mdb); + goto cleanup; + } mdb_read_columns(table); - mdb_bind_column_by_name(table, "Id", obj_id, NULL); - mdb_bind_column_by_name(table, "Name", obj_name, NULL); - mdb_bind_column_by_name(table, "Type", obj_type, NULL); - mdb_bind_column_by_name(table, "Flags", obj_flags, NULL); - i = mdb_bind_column_by_name(table, "LvProp", obj_props, &kkd_size_ole); + if (mdb_bind_column_by_name(table, "Id", obj_id, NULL) == -1 || + mdb_bind_column_by_name(table, "Name", obj_name, NULL) == -1 || + mdb_bind_column_by_name(table, "Type", obj_type, NULL) == -1 || + mdb_bind_column_by_name(table, "Flags", obj_flags, NULL) == -1) { + mdb_free_catalog(mdb); + goto cleanup; + } + if ((i = mdb_bind_column_by_name(table, "LvProp", obj_props, &kkd_size_ole)) == -1) { + mdb_free_catalog(mdb); + goto cleanup; + } col_props = g_ptr_array_index(table->columns, i-1); mdb_rewind_table(table); @@ -133,7 +142,9 @@ GPtrArray *mdb_read_catalog (MdbHandle *mdb, int objtype) } //mdb_dump_catalog(mdb, MDB_TABLE); - mdb_free_tabledef(table); +cleanup: + if (table) + mdb_free_tabledef(table); return mdb->catalog; } diff --git a/src/util/mdb-export.c b/src/util/mdb-export.c index 24748b6..58ac948 100755 --- a/src/util/mdb-export.c +++ b/src/util/mdb-export.c @@ -64,7 +64,7 @@ print_col(FILE *outfile, gchar *col_val, int quote_text, int col_type, int bin_l fprintf(outfile, "%s%s", escape_char, escape_char); col_val += orig_escape_len; #endif - } else if (is_binary_type(col_type) && *col_val <= 0 && bin_mode == MDB_BINEXPORT_OCTAL) + } else if (is_binary_type(col_type) && bin_mode == MDB_BINEXPORT_OCTAL) fprintf(outfile, "\\%03o", *(unsigned char*)col_val++); else putc(*col_val++, outfile);