aboutsummaryrefslogtreecommitdiff
path: root/miscutils/hexedit.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-07-23 14:21:07 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2018-07-23 14:26:55 +0200
commitca2f831ead327d98ab3374acb3b07ad7632ea02d (patch)
tree297a6533950a24a21390483f54f053513e67868f /miscutils/hexedit.c
parentf36caa4071bbb5bb6d098ced8116accc65370dd8 (diff)
downloadbusybox-w32-ca2f831ead327d98ab3374acb3b07ad7632ea02d.tar.gz
busybox-w32-ca2f831ead327d98ab3374acb3b07ad7632ea02d.tar.bz2
busybox-w32-ca2f831ead327d98ab3374acb3b07ad7632ea02d.zip
hexedit: fixes for redraw and down movement causing SEGV on attempt to access
"Go to:" command was not updating row position, making next "down" movements for one screenful print empty lines instead of showing the contents. If the file is whole pages long, "down" movement at EOF was advancing position +16 bytes, mapping the next portion (entirely past the end of the file), then finding out that the new position is beyond the EOF, rolling it back -16 bytes... ending up with this postion pointing *before* the mapped portion. Any next access (e.g. "move right" key) SEGVs. function old new delta hexedit_main 1170 1184 +14 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils/hexedit.c')
-rw-r--r--miscutils/hexedit.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/miscutils/hexedit.c b/miscutils/hexedit.c
index 95c930d12..298eb8149 100644
--- a/miscutils/hexedit.c
+++ b/miscutils/hexedit.c
@@ -153,7 +153,8 @@ static void redraw(unsigned cursor)
153 i++; 153 i++;
154 } 154 }
155 155
156 printf(ESC"[%u;%uH", 1 + cursor / 16, 1 + pos + (cursor & 0xf) * 3); 156 G.row = cursor / 16;
157 printf(ESC"[%u;%uH", 1 + G.row, 1 + pos + (cursor & 0xf) * 3);
157} 158}
158 159
159static void redraw_cur_line(void) 160static void redraw_cur_line(void)
@@ -367,6 +368,8 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv)
367 if (G.current_byte > G.eof_byte) { 368 if (G.current_byte > G.eof_byte) {
368 /* _after_ eof - don't allow this */ 369 /* _after_ eof - don't allow this */
369 G.current_byte -= 16; 370 G.current_byte -= 16;
371 if (G.current_byte < G.baseaddr)
372 move_mapping_lower();
370 break; 373 break;
371 } 374 }
372 } 375 }