Fix #8228 - Just use r_str_ncpy

This commit is contained in:
pancake 2017-08-18 03:55:18 +02:00
parent 7867eaecc1
commit 3acd623664
3 changed files with 16 additions and 13 deletions

View File

@ -1306,6 +1306,7 @@ struct section_t* MACH0_(get_sections)(struct MACH0_(obj_t)* bin) {
sections[i].align = 4096;
sections[i].flags = seg->flags;
r_str_ncpy (sectname, seg->segname, sizeof (sectname) - 1);
r_str_filter (sectname, -1);
// hack to support multiple sections with same name
sections[i].srwx = prot2perm (seg->initprot);
sections[i].last = 0;
@ -1331,6 +1332,7 @@ struct section_t* MACH0_(get_sections)(struct MACH0_(obj_t)* bin) {
sections[i].align = bin->sects[i].align;
sections[i].flags = bin->sects[i].flags;
r_str_ncpy (sectname, bin->sects[i].sectname, sizeof (sectname) - 1);
r_str_filter (sectname, -1);
// hack to support multiple sections with same name
// snprintf (segname, sizeof (segname), "%d", i); // wtf
snprintf (segname, sizeof (segname), "%d.%s", i, bin->sects[i].segname);
@ -1535,7 +1537,8 @@ struct symbol_t* MACH0_(get_symbols)(struct MACH0_(obj_t)* bin) {
if (!symstr_dup) {
symbols[j].name[0] = 0;
} else {
strncpy (symbols[j].name, symstr_dup, R_BIN_MACH0_STRING_LENGTH-1);
r_str_ncpy (symbols[j].name, symstr_dup, R_BIN_MACH0_STRING_LENGTH - 1);
r_str_filter (symbols[j].name, -1);
symbols[j].name[R_BIN_MACH0_STRING_LENGTH - 2] = 0;
}
free (symstr_dup);
@ -1690,7 +1693,8 @@ struct import_t* MACH0_(get_imports)(struct MACH0_(obj_t)* bin) {
}
symstr_dup = r_str_ndup (symstr, len);
if (symstr_dup) {
strncpy (imports[j].name, symstr_dup, R_BIN_MACH0_STRING_LENGTH - 1);
r_str_ncpy (imports[j].name, symstr_dup, R_BIN_MACH0_STRING_LENGTH - 1);
r_str_filter (imports[j].name, - 1);
imports[j].name[R_BIN_MACH0_STRING_LENGTH - 2] = 0;
free (symstr_dup);
}

View File

@ -50,12 +50,6 @@ static void my_io_redirect (RIO *io, const char *ref, const char *file) {
#include <mach-o/nlist.h>
#endif
#if __APPLE__ || __BSD__
static void inferior_abort_handler(int pid) {
eprintf ("Inferior received signal SIGABRT. Executing BKPT.\n");
}
#endif
/*
* Creates a new process and returns the result:
* -1 : error
@ -186,7 +180,13 @@ err_fork:
}
#else // windows
#if 0
#if (__APPLE__ && __POWERPC__) || !__APPLE__
#if __APPLE__ || __BSD__
static void inferior_abort_handler(int pid) {
eprintf ("Inferior received signal SIGABRT. Executing BKPT.\n");
}
#endif
// UNUSED
static void trace_me () {
#if __APPLE__

View File

@ -1,4 +1,4 @@
/* radare - LGPL - Copyright 2007-2016 - pancake */
/* radare - LGPL - Copyright 2007-2017 - pancake */
#include "r_types.h"
#include "r_util.h"
@ -797,12 +797,11 @@ R_API char *r_str_trim_head_tail(char *str) {
return r_str_trim_tail (r_str_trim_head (str));
}
// Copy all printable characters from src to dst, copy all printable characters
// as '.'.
// Secure string copy with null terminator (like strlcpy or strscpy but ours
R_API void r_str_ncpy(char *dst, const char *src, int n) {
int i;
for (i = 0; src[i] && n > 0; i++, n--) {
dst[i] = IS_PRINTABLE (src[i])? src[i]: '.';
dst[i] = src[i];
}
dst[i] = 0;
}