Fixed a memory leak in the attribute segmentation code
authorAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 27 Feb 2015 14:13:07 +0000 (15:13 +0100)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 27 Feb 2015 14:13:26 +0000 (15:13 +0100)
src/libimcv/seg/seg_env.c
src/libimcv/seg/seg_env.h
src/libimcv/suites/test_imcv_seg.c

index c47ce29..1605c84 100644 (file)
@@ -233,7 +233,7 @@ seg_env_t *seg_env_create(uint32_t base_attr_id, pa_tnc_attr_t *base_attr,
                        .destroy = _destroy,
                },
                .base_attr_id = base_attr_id,
-               .base_attr = base_attr->get_ref(base_attr),
+               .base_attr = base_attr,
                .max_seg_size = max_seg_size,
                .data = base_attr->get_value(base_attr),
        );
index 08d33d7..611f9a9 100644 (file)
@@ -98,7 +98,7 @@ struct seg_env_t {
  * Create a PA-TNC attribute segment envelope object
  *
  * @param base_attr_id         Base Attribute ID
- * @param base_attr                    Base Attribute to be segmented
+ * @param base_attr                    Base Attribute to be segmented, owned by seg_env_t
  * @param max_seg_size         Maximum segment size
  */
 seg_env_t* seg_env_create(uint32_t base_attr_id, pa_tnc_attr_t *base_attr,
index 469b111..5202afd 100644 (file)
@@ -64,10 +64,11 @@ START_TEST(test_imcv_seg_env)
        libimcv_init(FALSE);
        max_seg_size  = seg_env_tests[_i].max_seg_size;
        last_seg_size = seg_env_tests[_i].last_seg_size;
+
        base_attr = ita_attr_command_create(command);
        base_attr->build(base_attr);
-
        seg_env = seg_env_create(id, base_attr, max_seg_size);
+
        if (seg_env_tests[_i].next_segs == 0)
        {
                ck_assert(seg_env == NULL);
@@ -156,7 +157,6 @@ START_TEST(test_imcv_seg_env)
                seg_env1->destroy(seg_env1);
                base_attr1->destroy(base_attr1);
        }
-       base_attr->destroy(base_attr);
        libimcv_deinit();
 }
 END_TEST