Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVojtech Kral <vojtech@kral.hk>2019-02-27 18:32:17 +0300
committerVojtech Kral <vojtech@kral.hk>2019-03-01 15:15:20 +0300
commitb7941345d1f641b7a726a317fe055b5d7ed74e3a (patch)
tree47ddc3b3fbddd8622a55f686aec54d98a3205e85 /src/avrdude
parenta61a72cc943ebaa4b6143aa69f6d77b3e37e3471 (diff)
avrdude: Fix serial port handle leak in many places
Diffstat (limited to 'src/avrdude')
-rw-r--r--src/avrdude/arduino.c4
-rw-r--r--src/avrdude/jtagmkII.c26
-rw-r--r--src/avrdude/stk500.c8
-rw-r--r--src/avrdude/stk500v2.c8
-rw-r--r--src/avrdude/wiring.c4
5 files changed, 38 insertions, 12 deletions
diff --git a/src/avrdude/arduino.c b/src/avrdude/arduino.c
index 5a9cb465e..53e5ed822 100644
--- a/src/avrdude/arduino.c
+++ b/src/avrdude/arduino.c
@@ -158,8 +158,10 @@ static int arduino_open(PROGRAMMER * pgm, char * port)
return -1;
}
- if (stk500_getsync(pgm) < 0)
+ if (stk500_getsync(pgm) < 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
return 0;
}
diff --git a/src/avrdude/jtagmkII.c b/src/avrdude/jtagmkII.c
index 78c412ce6..d14c4ce74 100644
--- a/src/avrdude/jtagmkII.c
+++ b/src/avrdude/jtagmkII.c
@@ -1527,8 +1527,10 @@ static int jtagmkII_open(PROGRAMMER * pgm, char * port)
*/
jtagmkII_drain(pgm, 0);
- if (jtagmkII_getsync(pgm, EMULATOR_MODE_JTAG) < 0)
+ if (jtagmkII_getsync(pgm, EMULATOR_MODE_JTAG) < 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
return 0;
}
@@ -1579,8 +1581,10 @@ static int jtagmkII_open_dw(PROGRAMMER * pgm, char * port)
*/
jtagmkII_drain(pgm, 0);
- if (jtagmkII_getsync(pgm, EMULATOR_MODE_DEBUGWIRE) < 0)
+ if (jtagmkII_getsync(pgm, EMULATOR_MODE_DEBUGWIRE) < 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
return 0;
}
@@ -1631,8 +1635,10 @@ static int jtagmkII_open_pdi(PROGRAMMER * pgm, char * port)
*/
jtagmkII_drain(pgm, 0);
- if (jtagmkII_getsync(pgm, EMULATOR_MODE_PDI) < 0)
+ if (jtagmkII_getsync(pgm, EMULATOR_MODE_PDI) < 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
return 0;
}
@@ -1684,8 +1690,10 @@ static int jtagmkII_dragon_open(PROGRAMMER * pgm, char * port)
*/
jtagmkII_drain(pgm, 0);
- if (jtagmkII_getsync(pgm, EMULATOR_MODE_JTAG) < 0)
+ if (jtagmkII_getsync(pgm, EMULATOR_MODE_JTAG) < 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
return 0;
}
@@ -1737,8 +1745,10 @@ static int jtagmkII_dragon_open_dw(PROGRAMMER * pgm, char * port)
*/
jtagmkII_drain(pgm, 0);
- if (jtagmkII_getsync(pgm, EMULATOR_MODE_DEBUGWIRE) < 0)
+ if (jtagmkII_getsync(pgm, EMULATOR_MODE_DEBUGWIRE) < 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
return 0;
}
@@ -1790,8 +1800,10 @@ static int jtagmkII_dragon_open_pdi(PROGRAMMER * pgm, char * port)
*/
jtagmkII_drain(pgm, 0);
- if (jtagmkII_getsync(pgm, EMULATOR_MODE_PDI) < 0)
+ if (jtagmkII_getsync(pgm, EMULATOR_MODE_PDI) < 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
return 0;
}
@@ -3370,6 +3382,8 @@ static int jtagmkII_open32(PROGRAMMER * pgm, char * port)
status = jtagmkII_getsync(pgm, -1);
if(status < 0) return -1;
+ // FIXME: Error handling is bad here: memory leak in resp (?) and port not closed
+
// AVR32 "special"
buf[0] = CMND_SET_PARAMETER;
buf[1] = 0x2D;
diff --git a/src/avrdude/stk500.c b/src/avrdude/stk500.c
index 63deb228f..efb7078bc 100644
--- a/src/avrdude/stk500.c
+++ b/src/avrdude/stk500.c
@@ -669,11 +669,15 @@ static int stk500_open(PROGRAMMER * pgm, char * port)
// MIB510 init
if (strcmp(ldata(lfirst(pgm->id)), "mib510") == 0 &&
- mib510_isp(pgm, 1) != 0)
+ mib510_isp(pgm, 1) != 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
- if (stk500_getsync(pgm) < 0)
+ if (stk500_getsync(pgm) < 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
return 0;
}
diff --git a/src/avrdude/stk500v2.c b/src/avrdude/stk500v2.c
index 691152b46..9bc629ba4 100644
--- a/src/avrdude/stk500v2.c
+++ b/src/avrdude/stk500v2.c
@@ -1695,8 +1695,10 @@ static int stk500v2_open(PROGRAMMER * pgm, char * port)
stk500v2_drain(pgm, 0);
if (pgm->bitclock != 0.0) {
- if (pgm->set_sck_period(pgm, pgm->bitclock) != 0)
+ if (pgm->set_sck_period(pgm, pgm->bitclock) != 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
}
return 0;
@@ -1753,8 +1755,10 @@ static int stk600_open(PROGRAMMER * pgm, char * port)
stk500v2_drain(pgm, 0);
if (pgm->bitclock != 0.0) {
- if (pgm->set_sck_period(pgm, pgm->bitclock) != 0)
+ if (pgm->set_sck_period(pgm, pgm->bitclock) != 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
}
return 0;
diff --git a/src/avrdude/wiring.c b/src/avrdude/wiring.c
index 562a3f17c..85a8532d2 100644
--- a/src/avrdude/wiring.c
+++ b/src/avrdude/wiring.c
@@ -192,8 +192,10 @@ static int wiring_open(PROGRAMMER * pgm, char * port)
/* drain any extraneous input */
stk500v2_drain(pgm, 0);
- if (stk500v2_getsync(pgm) < 0)
+ if (stk500v2_getsync(pgm) < 0) {
+ serial_close(&pgm->fd);
return -1;
+ }
return 0;
}