浏览代码

Fix free() calls ordering in modbus_mapping_new
Reported by Viet Nguyen Quoc.

Stéphane Raimbault 14 年之前
父节点
当前提交
04cde66b80
共有 1 个文件被更改,包括 9 次插入9 次删除
  1. 9 9
      src/modbus.c

+ 9 - 9
src/modbus.c

@@ -1358,8 +1358,8 @@ modbus_mapping_t* modbus_mapping_new(int nb_bits, int nb_input_bits,
         mb_mapping->tab_input_bits =
         mb_mapping->tab_input_bits =
             (uint8_t *) malloc(nb_input_bits * sizeof(uint8_t));
             (uint8_t *) malloc(nb_input_bits * sizeof(uint8_t));
         if (mb_mapping->tab_input_bits == NULL) {
         if (mb_mapping->tab_input_bits == NULL) {
-            free(mb_mapping);
             free(mb_mapping->tab_bits);
             free(mb_mapping->tab_bits);
+            free(mb_mapping);
             return NULL;
             return NULL;
         }
         }
         memset(mb_mapping->tab_input_bits, 0, nb_input_bits * sizeof(uint8_t));
         memset(mb_mapping->tab_input_bits, 0, nb_input_bits * sizeof(uint8_t));
@@ -1373,9 +1373,9 @@ modbus_mapping_t* modbus_mapping_new(int nb_bits, int nb_input_bits,
         mb_mapping->tab_registers =
         mb_mapping->tab_registers =
             (uint16_t *) malloc(nb_registers * sizeof(uint16_t));
             (uint16_t *) malloc(nb_registers * sizeof(uint16_t));
         if (mb_mapping->tab_registers == NULL) {
         if (mb_mapping->tab_registers == NULL) {
-            free(mb_mapping);
-            free(mb_mapping->tab_bits);
             free(mb_mapping->tab_input_bits);
             free(mb_mapping->tab_input_bits);
+            free(mb_mapping->tab_bits);
+            free(mb_mapping);
             return NULL;
             return NULL;
         }
         }
         memset(mb_mapping->tab_registers, 0, nb_registers * sizeof(uint16_t));
         memset(mb_mapping->tab_registers, 0, nb_registers * sizeof(uint16_t));
@@ -1389,10 +1389,10 @@ modbus_mapping_t* modbus_mapping_new(int nb_bits, int nb_input_bits,
         mb_mapping->tab_input_registers =
         mb_mapping->tab_input_registers =
             (uint16_t *) malloc(nb_input_registers * sizeof(uint16_t));
             (uint16_t *) malloc(nb_input_registers * sizeof(uint16_t));
         if (mb_mapping->tab_input_registers == NULL) {
         if (mb_mapping->tab_input_registers == NULL) {
-            free(mb_mapping);
-            free(mb_mapping->tab_bits);
-            free(mb_mapping->tab_input_bits);
             free(mb_mapping->tab_registers);
             free(mb_mapping->tab_registers);
+            free(mb_mapping->tab_input_bits);
+            free(mb_mapping->tab_bits);
+            free(mb_mapping);
             return NULL;
             return NULL;
         }
         }
         memset(mb_mapping->tab_input_registers, 0,
         memset(mb_mapping->tab_input_registers, 0,
@@ -1405,10 +1405,10 @@ modbus_mapping_t* modbus_mapping_new(int nb_bits, int nb_input_bits,
 /* Frees the 4 arrays */
 /* Frees the 4 arrays */
 void modbus_mapping_free(modbus_mapping_t *mb_mapping)
 void modbus_mapping_free(modbus_mapping_t *mb_mapping)
 {
 {
-    free(mb_mapping->tab_bits);
-    free(mb_mapping->tab_input_bits);
-    free(mb_mapping->tab_registers);
     free(mb_mapping->tab_input_registers);
     free(mb_mapping->tab_input_registers);
+    free(mb_mapping->tab_registers);
+    free(mb_mapping->tab_input_bits);
+    free(mb_mapping->tab_bits);
     free(mb_mapping);
     free(mb_mapping);
 }
 }