diff --git a/libr/cons/cons.c b/libr/cons/cons.c index b59ad8e5eb..cc0ebbb9c9 100644 --- a/libr/cons/cons.c +++ b/libr/cons/cons.c @@ -1,4 +1,4 @@ -/* radare - LGPL - Copyright 2008-2014 - pancake */ +/* radare - LGPL - Copyright 2008-2015 - pancake */ #include #include @@ -350,8 +350,7 @@ R_API void r_cons_flush() { r_cons_filter (); if (I.is_interactive) { /* Use a pager if the output doesn't fit on the terminal window. */ - if (I.pager && *(I.pager) - && I.buffer_len > 0 + if (I.pager && *I.pager && I.buffer_len > 0 && r_str_char_count (I.buffer, '\n') >= I.rows) { I.buffer[I.buffer_len-1] = 0; r_sys_cmd_str_full (I.pager, I.buffer, NULL, NULL, NULL); diff --git a/libr/core/cmd_cmp.c b/libr/core/cmd_cmp.c index 3d675fae62..62a9042ea3 100644 --- a/libr/core/cmd_cmp.c +++ b/libr/core/cmd_cmp.c @@ -415,17 +415,17 @@ static int cmd_cmp(void *data, const char *input) { free (b); } break; - case 'g': + case 'g': // "cg" { // XXX: this is broken int diffops = 0; RCore *core2; char *file2 = NULL; switch (input[1]) { - case 'o': + case 'o': // "cgo" file2 = (char*)r_str_chop_ro (input+2); r_anal_diff_setup (core->anal, R_TRUE, -1, -1); break; - case 'f': + case 'f': // "cgf" eprintf ("TODO: agf is experimental\n"); r_anal_diff_setup (core->anal, R_TRUE, -1, -1); r_core_gdiff_fcn (core, core->offset, @@ -470,6 +470,8 @@ static int cmd_cmp(void *data, const char *input) { r_config_get_i (core->config, "bin.baddr")); r_core_gdiff (core, core2, 1); r_core_diff_show (core, core2); + /* exchange a segfault with a memleak */ + core2->config = NULL; r_core_free (core2); } break;