From c225694c7c61c8c18c941f45ad4ce4ea7eabdd8b Mon Sep 17 00:00:00 2001 From: pancake Date: Thu, 29 May 2014 15:27:18 +0200 Subject: [PATCH] Fix build and several coverity issues --- libr/bin/format/pe/pe.c | 12 ++++--- libr/bin/p/bin_xbe.c | 74 ++++++++++++++++++++--------------------- libr/io/io.c | 2 +- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/libr/bin/format/pe/pe.c b/libr/bin/format/pe/pe.c index 6412976c37..94806d8ca8 100644 --- a/libr/bin/format/pe/pe.c +++ b/libr/bin/format/pe/pe.c @@ -171,7 +171,7 @@ typedef struct { static struct r_bin_pe_export_t* parse_symbol_table(struct PE_(r_bin_pe_obj_t)* bin, struct r_bin_pe_export_t *exports, int sz) { //ut64 baddr = (ut64)bin->nt_headers->optional_header.ImageBase; - ut64 off, num; + ut64 off, num = 0; const int srsz = 18; // symbol record size struct r_bin_pe_section_t* sections; struct r_bin_pe_export_t* exp; @@ -185,11 +185,14 @@ static struct r_bin_pe_export_t* parse_symbol_table(struct PE_(r_bin_pe_obj_t)* int symctr = 0; char *buf; - shsz = bufsz = num * srsz; - if (!bin || bufsz<1 || bufsz>bin->size) + if (!bin || !bin->nt_headers) { return 0; + } off = bin->nt_headers->file_header.PointerToSymbolTable; num = bin->nt_headers->file_header.NumberOfSymbols; + shsz = bufsz = num * srsz; + if (bufsz<1 || bufsz>bin->size) + return 0; buf = malloc (bufsz); if (!buf) return 0; @@ -890,7 +893,6 @@ char* PE_(r_bin_pe_get_os)(struct PE_(r_bin_pe_obj_t)* bin) { // TODO: make it const char* PE_(r_bin_pe_get_class)(struct PE_(r_bin_pe_obj_t)* bin) { - char *class; if (!bin || !bin->nt_headers) return NULL; switch (bin->nt_headers->optional_header.Magic) { @@ -1004,7 +1006,7 @@ int PE_(r_bin_pe_is_dll)(struct PE_(r_bin_pe_obj_t)* bin) { int PE_(r_bin_pe_is_pie)(struct PE_(r_bin_pe_obj_t)* bin) { if (!bin || !bin->nt_headers) return 0; - return bin->nt_headers->optional_header.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE; + return bin->nt_headers->optional_header.DllCharacteristics & IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE; #if 0 BOOL aslr = inh->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE; //TODO : implement dep? diff --git a/libr/bin/p/bin_xbe.c b/libr/bin/p/bin_xbe.c index 672148d933..e87f6e6018 100644 --- a/libr/bin/p/bin_xbe.c +++ b/libr/bin/p/bin_xbe.c @@ -77,32 +77,27 @@ static int destroy(RBinFile *arch) return R_TRUE; } -static RBinAddr* binsym(RBinFile *arch, int type) -{ - r_bin_xbe_obj_t *obj = arch->o->bin_obj; - +static RBinAddr* binsym(RBinFile *arch, int type) { + RBinAddr *ret; + r_bin_xbe_obj_t *obj; if (!arch || !arch->buf || type != R_BIN_SYM_MAIN) return NULL; - - RBinAddr *ret = R_NEW0 (RBinAddr); - if (!ret) - return NULL; - + obj = arch->o->bin_obj; + ret = R_NEW0 (RBinAddr); + if (!ret) return NULL; ret->vaddr = obj->header->ep ^ obj->ep_key; ret->paddr = ret->vaddr - obj->header->base; - return ret; } -static RList* entries(RBinFile *arch) -{ +static RList* entries(RBinFile *arch) { r_bin_xbe_obj_t *obj = arch->o->bin_obj; - RList *ret = r_list_new (); + RList *ret; RBinAddr *ptr = R_NEW(RBinAddr); if (!arch || !arch->buf || !ret || !ptr) return NULL; - + ret = r_list_new (); ret->free = free; ptr->vaddr = obj->header->ep ^ obj->ep_key; @@ -113,14 +108,14 @@ static RList* entries(RBinFile *arch) return ret; } -static RList* sections(RBinFile *arch) -{ - r_bin_xbe_obj_t *obj = arch->o->bin_obj; +static RList* sections(RBinFile *arch) { + r_bin_xbe_obj_t *obj; RList *ret; int i; - if (!arch) + if (!arch || !arch->o) return NULL; + obj = arch->o->bin_obj; ret = r_list_new(); if (!ret ) @@ -161,30 +156,32 @@ static RList* sections(RBinFile *arch) return ret; } -static RList* libs(RBinFile *arch) -{ - r_bin_xbe_obj_t *obj = arch->o->bin_obj; +static RList* libs(RBinFile *arch) { + r_bin_xbe_obj_t *obj; RList *ret = r_list_new(); xbe_lib lib; char *s; int i; - if (!arch || !ret) + if (!arch || !ret || !arch->o) return NULL; + obj = arch->o->bin_obj; ret->free = free; - r_buf_read_at (arch->buf, obj->header->kernel_lib_addr - obj->header->base, (ut8 *)&lib, sizeof(xbe_lib)); - s = r_str_newf("%s %i.%i.%i", lib.name, lib.major, lib.minor, lib.build); + r_buf_read_at (arch->buf, obj->header->kernel_lib_addr - obj->header->base, + (ut8 *)&lib, sizeof(xbe_lib)); + s = r_str_newf ("%s %i.%i.%i", lib.name, lib.major, lib.minor, lib.build); + if (s) r_list_append (ret, s); + + r_buf_read_at (arch->buf, obj->header->xapi_lib_addr - obj->header->base, + (ut8 *)&lib, sizeof(xbe_lib)); + s = r_str_newf ("%s %i.%i.%i", lib.name, lib.major, lib.minor, lib.build); if (s) r_list_append(ret, s); - r_buf_read_at (arch->buf, obj->header->xapi_lib_addr - obj->header->base, (ut8 *)&lib, sizeof(xbe_lib)); - s = r_str_newf("%s %i.%i.%i", lib.name, lib.major, lib.minor, lib.build); - if (s) r_list_append(ret, s); - - for (i = 0; i < obj->header->lib_versions; i++) - { - r_buf_read_at (arch->buf, obj->header->lib_versions_addr - obj->header->base + (i * sizeof(xbe_lib)), (ut8 *)&lib, sizeof(xbe_lib)); + for (i = 0; i < obj->header->lib_versions; i++) { + r_buf_read_at (arch->buf, obj->header->lib_versions_addr - \ + obj->header->base + (i * sizeof(xbe_lib)), (ut8 *)&lib, sizeof(xbe_lib)); s = r_str_newf("%s %i.%i.%i", lib.name, lib.major, lib.minor, lib.build); if (s) r_list_append(ret, s); } @@ -192,17 +189,18 @@ static RList* libs(RBinFile *arch) return ret; } -static RList* symbols(RBinFile *arch) -{ - r_bin_xbe_obj_t *obj = arch->o->bin_obj; +static RList* symbols(RBinFile *arch) { + r_bin_xbe_obj_t *obj; RList *ret = r_list_new(); int i, found = R_FALSE; ut32 thunk_addr[XBE_MAX_THUNK]; - ut32 kt_addr = obj->header->kernel_thunk_addr ^ obj->kt_key; + ut32 kt_addr; xbe_section sect; - if (!ret) + if (!ret || !arch || !arch->o) return NULL; + kt_addr = obj->header->kernel_thunk_addr ^ obj->kt_key; + obj = arch->o->bin_obj; ret->free = free; // PA -> VA translation @@ -226,7 +224,7 @@ static RList* symbols(RBinFile *arch) return NULL; } - const ut32 thunk_index = thunk_addr[i] ^ 0x80000000; + ut32 thunk_index = thunk_addr[i] ^ 0x80000000; // Basic sanity checks if (thunk_addr[i]&0x80000000 && thunk_index <= XBE_MAX_THUNK) { @@ -237,7 +235,7 @@ static RList* symbols(RBinFile *arch) sym->ordinal = i; r_list_append(ret, sym); - } + } else free (sym); } return ret; diff --git a/libr/io/io.c b/libr/io/io.c index 5dbadfdc63..113067b596 100644 --- a/libr/io/io.c +++ b/libr/io/io.c @@ -217,7 +217,7 @@ R_API RList *r_io_open_many(RIO *io, const char *file, int flags, int mode) { } R_API int r_io_use_desc (RIO *io, RIODesc *d) { - if (d >= 0) { + if (d) { io->desc = d; io->plugin = d->plugin; return R_TRUE;