diff --git a/src/term.c b/src/term.c index e9fc6de8..04301304 100644 --- a/src/term.c +++ b/src/term.c @@ -422,10 +422,15 @@ static int cmd_write(PROGRAMMER * pgm, struct avrpart * p, for (i = start_offset; i < len + start_offset; i++) { data.is_float = false; data.size = 0; - data.str_ptr = NULL; // Handle the next argument if (i < argc - start_offset + 3) { + // Free string pointer if already allocated + if(data.str_ptr) { + free(data.str_ptr); + data.str_ptr = NULL; + } + // Get suffix if present char suffix = argv[i][strlen(argv[i]) - 1]; char lsuffix = argv[i][strlen(argv[i]) - 2]; @@ -474,6 +479,8 @@ static int cmd_write(PROGRAMMER * pgm, struct avrpart * p, avrdude_message(MSG_INFO, "\n%s (write): can't parse data '%s'\n", progname, argv[i]); free(buf); + if(data.str_ptr != NULL) + free(data.str_ptr); return -1; } } @@ -513,7 +520,6 @@ static int cmd_write(PROGRAMMER * pgm, struct avrpart * p, if(data.str_ptr) { for(int16_t j = 0; j < strlen(data.str_ptr); j++) buf[i - start_offset + data.bytes_grown++] = (uint8_t)data.str_ptr[j]; - free(data.str_ptr); } else { buf[i - start_offset + data.bytes_grown] = data.a[0]; if (llabs(data.ll) > 0x000000FF || data.size >= 2 || data.is_float) @@ -543,6 +549,9 @@ static int cmd_write(PROGRAMMER * pgm, struct avrpart * p, return -1; } + if(data.str_ptr) + free(data.str_ptr); + avrdude_message(MSG_NOTICE, "\nInfo: Writing %d bytes starting from address 0x%02x", len + data.bytes_grown, addr); if (write_mode == WRITE_MODE_FILL)