sanitize fix - lf/hf tune heap overflow

This commit is contained in:
iceman1001 2021-01-28 20:31:39 +01:00
commit 6737f6f3cd
3 changed files with 21 additions and 20 deletions

View file

@ -277,7 +277,6 @@ static int CmdGallagherSim(const char *Cmd) {
return resp.status; return resp.status;
return PM3_SUCCESS; return PM3_SUCCESS;
return PM3_SUCCESS;
} }
static command_t CommandTable[] = { static command_t CommandTable[] = {

View file

@ -582,12 +582,11 @@ static int CmdTraceSave(const char *Cmd) {
if (g_traceLen == 0) { if (g_traceLen == 0) {
download_trace(); download_trace();
}
if (g_traceLen == 0) { if (g_traceLen == 0) {
PrintAndLogEx(WARNING, "trace is empty, nothing to save"); PrintAndLogEx(WARNING, "trace is empty, nothing to save");
return PM3_SUCCESS; return PM3_SUCCESS;
} }
}
saveFile(filename, ".trace", g_trace, g_traceLen); saveFile(filename, ".trace", g_trace, g_traceLen);
return PM3_SUCCESS; return PM3_SUCCESS;

View file

@ -642,9 +642,12 @@ void print_progress(size_t count, uint64_t max, barMode_t style) {
prev_cols = cols; prev_cols = cols;
#endif #endif
int width = cols - 35; int width = cols - 35;
if (width < 1)
return;
#define PERCENTAGE(V, T) ((V * width) / T) #define PERCENTAGE(V, T) ((V * width) / T)
// x/8 fractional part of the percentage // x/8 fractional part of the percentage
#define PERCENTAGEFRAC(V, T) ((int)(((((float)V * width) / T) - ((V * width) / T)) * 8)) #define PERCENTAGEFRAC(V, T) ((uint8_t)(((((float)V * width) / T) - ((V * width) / T)) * 8))
const char *smoothtable[] = { const char *smoothtable[] = {
"\xe2\x80\x80", "\xe2\x80\x80",
@ -658,14 +661,15 @@ void print_progress(size_t count, uint64_t max, barMode_t style) {
"\xe2\x96\x88", "\xe2\x96\x88",
}; };
uint8_t mode = (session.emoji_mode == EMO_EMOJI); int mode = (session.emoji_mode == EMO_EMOJI);
const char *block[] = {"#", "\xe2\x96\x88"}; const char *block[] = {"#", "\xe2\x96\x88"};
// use a 3-byte space in emoji mode to ease computations // use a 3-byte space in emoji mode to ease computations
const char *space[] = {" ", "\xe2\x80\x80"}; const char *space[] = {" ", "\xe2\x80\x80"};
uint8_t unit = strlen(block[mode]);
size_t unit = strlen(block[mode]);
// +1 for \0 // +1 for \0
char *bar = calloc(unit * width + 1, sizeof(uint8_t)); char *bar = (char *)calloc(unit * width + 1, sizeof(uint8_t));
uint8_t value = PERCENTAGE(count, max); uint8_t value = PERCENTAGE(count, max);
@ -687,7 +691,7 @@ void print_progress(size_t count, uint64_t max, barMode_t style) {
} }
// color buffer // color buffer
size_t collen = strlen(bar) + 40; size_t collen = strlen(bar) + 40;
char *cbar = calloc(collen, sizeof(uint8_t)); char *cbar = (char *)calloc(collen, sizeof(uint8_t));
// Add colors // Add colors
if (session.supports_colors) { if (session.supports_colors) {
@ -695,23 +699,23 @@ void print_progress(size_t count, uint64_t max, barMode_t style) {
int p20 = unit * (width * 20 / 100); int p20 = unit * (width * 20 / 100);
snprintf(cbar, collen, _GREEN_("%.*s"), p60, bar); snprintf(cbar, collen, _GREEN_("%.*s"), p60, bar);
snprintf(cbar + strlen(cbar), collen - strlen(cbar), _CYAN_("%.*s"), p20, bar + p60); snprintf(cbar + strlen(cbar), collen - strlen(cbar), _CYAN_("%.*s"), p20, bar + p60);
snprintf(cbar + strlen(cbar), collen - strlen(cbar), _YELLOW_("%.*s"), unit * width - p60 - p20, bar + p60 + p20); snprintf(cbar + strlen(cbar), collen - strlen(cbar), _YELLOW_("%.*s"), (int)(unit * width - p60 - p20), bar + p60 + p20);
} else { } else {
snprintf(cbar, collen, "%s", bar); snprintf(cbar, collen, "%s", bar);
} }
size_t len = strlen(cbar) + 32; size_t olen = strlen(cbar) + 40;
char *buffer = calloc(len, sizeof(uint8_t)); char *out = (char *)calloc(olen, sizeof(uint8_t));
switch (style) { switch (style) {
case STYLE_BAR: { case STYLE_BAR: {
sprintf(buffer, "%s", cbar); sprintf(out, "%s", cbar);
printf("\b%c[2K\r[" _YELLOW_("=")"] %s", 27, buffer); printf("\b%c[2K\r[" _YELLOW_("=")"] %s", 27, out);
break; break;
} }
case STYLE_MIXED: { case STYLE_MIXED: {
sprintf(buffer, "%s [ %zu mV / %2u V / %2u Vmax ] ", cbar, count, (uint32_t)(count / 1000), (uint32_t)(max / 1000)); sprintf(out, "%s [ %zu mV / %2u V / %2u Vmax ]", cbar, count, (uint32_t)(count / 1000), (uint32_t)(max / 1000));
printf("\b%c[2K\r[" _YELLOW_("=")"] %s ", 27, buffer); printf("\b%c[2K\r[" _YELLOW_("=")"] %s", 27, out);
break; break;
} }
case STYLE_VALUE: { case STYLE_VALUE: {
@ -719,9 +723,8 @@ void print_progress(size_t count, uint64_t max, barMode_t style) {
break; break;
} }
} }
fflush(stdout); fflush(stdout);
free(buffer); free(out);
free(bar); free(bar);
free(cbar); free(cbar);
} }