]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
ihex.c fix memory alloc
authorLeo C <erbl259-lmu@yahoo.de>
Sat, 18 Apr 2015 09:49:04 +0000 (11:49 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Sat, 18 Apr 2015 09:49:04 +0000 (11:49 +0200)
avr/ihex.c

index 2a9f033094ff722d2fb8d5bc5d80901515ade0cc..4e7b1a8ec7e90e65f746fff8de1046154e19f000 100644 (file)
@@ -90,25 +90,34 @@ ihex_t ihex_get_record() {
                uint8_t *p;     int k;
                if ((rec.data = malloc(rec.len)) == 0)
                        return rec;
+
                for (p=rec.data, k=rec.len; k; k--) {
                        if ((i = get_hexbyte()) < 0)
                                break;
                        sum += i;
                        *p++ = i;
                }
+
                if (k) {
                        free(rec.data); rec.data = 0;
                        return rec;
                }
        }
-       if ((i = get_hexbyte()) < 0)            /* Check sum */
-               return rec;
-       sum += i;
-       if (sum) {
-               free(rec.data); rec.data = 0;
-               rec.status = IHX_CHKSUMERR;
-       } else
-               rec.status = IHX_OK;
+
+       i = get_hexbyte();                              /* Check sum */
+
+       if (i >= 0) {
+               sum += i;
+               if (sum == 0)
+                       rec.status = IHX_OK;
+               else
+                       rec.status = IHX_CHKSUMERR;
+       }
+
+       if (rec.status != IHX_OK) {
+               free(rec.data);
+               rec.data = 0;
+       }
 
        return rec;
 }
@@ -176,6 +185,10 @@ command_ret_t do_loadihex(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
 
                } else
                        done = true;
+
+               free(rec.data);
+               rec.data = 0;
+
        }
 
        switch (rec.status) {