From 19b41bec5c24402898cdfd2c8fe69a40defb6036 Mon Sep 17 00:00:00 2001 From: pancake Date: Tue, 11 Jul 2017 08:44:31 +0200 Subject: [PATCH] Fix last covs --- libr/asm/p/asm_dalvik.c | 2 +- libr/asm/p/asm_evm.c | 1 + libr/core/cmd_debug.c | 1 + libr/debug/session.c | 52 ++++++++++++++++++++++++++++------------- libr/util/r_asn1.c | 7 ++++-- 5 files changed, 44 insertions(+), 19 deletions(-) diff --git a/libr/asm/p/asm_dalvik.c b/libr/asm/p/asm_dalvik.c index 48b03a814b..dc26c8c209 100644 --- a/libr/asm/p/asm_dalvik.c +++ b/libr/asm/p/asm_dalvik.c @@ -13,7 +13,7 @@ static int dalvik_disassemble (RAsm *a, RAsmOp *op, const ut8 *buf, int len) { if (!a || !op || !buf || len < 1) { return -1; } - int vA, vB, vC, payload = 0, i = (int) buf? buf[0]: 0; + int vA, vB, vC, payload = 0, i = (int) buf[0]; int size = dalvik_opcodes[i].len; char str[1024], *strasm; ut64 offset; diff --git a/libr/asm/p/asm_evm.c b/libr/asm/p/asm_evm.c index 242bedd060..3e6c3ff725 100644 --- a/libr/asm/p/asm_evm.c +++ b/libr/asm/p/asm_evm.c @@ -11,6 +11,7 @@ static int disassemble(RAsm *a, RAsmOp *op, const ut8 *buf, int len) { EvmOp eop = {0}; evm_dis (&eop, buf, len); strncpy (op->buf_asm, eop.txt, sizeof (op->buf_asm)); + op->buf_asm[sizeof (op->buf_asm) - 1] = 0; op->size = eop.len; return eop.len; } diff --git a/libr/core/cmd_debug.c b/libr/core/cmd_debug.c index 18cf1c0e77..8ed164e038 100644 --- a/libr/core/cmd_debug.c +++ b/libr/core/cmd_debug.c @@ -1903,6 +1903,7 @@ static void cmd_debug_reg(RCore *core, const char *str) { case '*': rad = str[1]; str++; + // fallthrough case ' ': { int role = r_reg_get_name_idx (str+2); diff --git a/libr/debug/session.c b/libr/debug/session.c index cc7babc501..6653baed97 100644 --- a/libr/debug/session.c +++ b/libr/debug/session.c @@ -284,6 +284,8 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) { fd = r_sandbox_fopen (base_file, "rb"); if (!fd) { + free (base_file); + free (diff_file); return; } @@ -293,7 +295,8 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) { /* Restore base snapshots */ while (true) { base = r_debug_snap_new (); - if (!fread (&snapentry, sizeof (RSnapEntry), 1, fd)) { + memset (&snapentry, 0, sizeof (RSnapEntry)); + if (fread (&snapentry, sizeof (RSnapEntry), 1, fd) != 1) { break; } base->addr = snapentry.addr; @@ -302,23 +305,34 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) { base->page_num = base->size / SNAP_PAGE_SIZE; base->timestamp = snapentry.timestamp; base->perm = snapentry.perm; - base->data = malloc (base->size); - fread (base->data, base->size, 1, fd); + base->data = calloc (base->size, 1); + if (!base->data) { + free (base); + break; + } + if (fread (base->data, base->size, 1, fd) != 1) { + free (base); + break; + } /* restore all hases */ base->hashes = R_NEWS0 (ut8 *, base->page_num); for (i = 0; i < base->page_num; i++) { base->hashes[i] = calloc (1, 128); - fread (base->hashes[i], 128, 1, fd); + if (fread (base->hashes[i], 128, 1, fd) != 1) { + break; + } } - r_list_append (dbg->snaps, base); } fclose (fd); - free (base_file); + R_FREE (base_file); /* Restore trace sessions */ fd = r_sandbox_fopen (diff_file, "rb"); + R_FREE (diff_file); if (!fd) { + free (base->data); + free (base); return; } @@ -330,7 +344,7 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) { while (true) { /* Restore session header */ - if (!fread (&header, sizeof (RSessionHeader), 1, fd)) { + if (fread (&header, sizeof (RSessionHeader), 1, fd) != 1) { break; } session = R_NEW0 (RDebugSession); @@ -343,9 +357,13 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) { for (i = 0; i < R_REG_TYPE_LAST; i++) { /* Resotre RReagArena from raw dump*/ int arena_size; - fread (&arena_size, sizeof (int), 1, fd); - arena_raw = malloc (arena_size); - fread (arena_raw, arena_size, 1, fd); + if (fread (&arena_size, sizeof (int), 1, fd) != 1) { + break; + } + arena_raw = calloc (arena_size, 1); + if (fread (arena_raw, arena_size, 1, fd) != 1) { + break; + } arena = R_NEW0 (RRegArena); arena->bytes = arena_raw; arena->size = arena_size; @@ -359,10 +377,12 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) { } /* Restore diff entries */ for (i = 0; i < header.difflist_len; i++) { - fread (&diffentry, sizeof (RDiffEntry), 1, fd); + (void)fread (&diffentry, sizeof (RDiffEntry), 1, fd); // eprintf ("diffentry base=%d pages=%d\n", diffentry.base_idx, diffentry.pages_len); snapdiff = R_NEW0 (RDebugSnapDiff); - + if (!snapdiff) { + break; + } /* Restore diff->base */ base = r_idx_to_snap (dbg, diffentry.base_idx); snapdiff->base = base; @@ -379,10 +399,10 @@ R_API void r_debug_session_restore(RDebug *dbg, const char *file) { ut32 clust_page = R_MIN (SNAP_PAGE_SIZE, base->size); for (p = 0; p < diffentry.pages_len; p++) { page = R_NEW0 (RPageData); - page->data = malloc (clust_page); - fread (&page->page_off, sizeof (ut32), 1, fd); - fread (page->data, SNAP_PAGE_SIZE, 1, fd); - fread (page->hash, 128, 1, fd); + page->data = calloc (1, clust_page); + (void)fread (&page->page_off, sizeof (ut32), 1, fd); + (void)fread (page->data, SNAP_PAGE_SIZE, 1, fd); + (void)fread (page->hash, 128, 1, fd); snapdiff->last_changes[page->page_off] = page; r_list_append (snapdiff->pages, page); } diff --git a/libr/util/r_asn1.c b/libr/util/r_asn1.c index 81dea15330..459aa61c81 100644 --- a/libr/util/r_asn1.c +++ b/libr/util/r_asn1.c @@ -20,7 +20,7 @@ RASN1String *r_asn1_create_string (const char *string, bool allocated, ut32 leng if (s) { s->allocated = allocated; s->length = length; - s->string = strdup (string); + s->string = string; } return s; } @@ -103,10 +103,13 @@ RASN1String *r_asn1_stringify_utctime (const ut8 *buffer, ut32 length) { } RASN1String *r_asn1_stringify_time (const ut8 *buffer, ut32 length) { - char str[24]; if (!buffer || length != 15 || buffer[14] != 'Z') { return NULL; } + char *str = malloc (24); + if (!str) { + return NULL; + } str[0] = buffer[6]; str[1] = buffer[7];