Fix some memory leakage found
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index 910989a..b8406b6 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -529,6 +529,10 @@
AL_IMPORT($$, exports, $1, xp_next);
AL_IMPORT($$, imports, $2, xp_next);
AL_IMPORT($$, members, $3, next);
+
+ asn1p_module_free($1);
+ asn1p_module_free($2);
+ asn1p_module_free($3);
}
;
@@ -544,6 +548,7 @@
break;
}
AL_IMPORT($$, members, $2, next);
+ asn1p_module_free($2);
}
;
@@ -874,6 +879,7 @@
ret = asn1p_ref_add_component($$.governor, $1, 0);
checkmem(ret == 0);
$$.argument = $3;
+ free($1);
}
| TypeRefName ':' TypeRefName {
int ret;
@@ -881,6 +887,7 @@
ret = asn1p_ref_add_component($$.governor, $1, 0);
checkmem(ret == 0);
$$.argument = $3;
+ free($1);
}
| BasicTypeId ':' Identifier {
int ret;
@@ -919,7 +926,7 @@
| SimpleValue {
$$ = NEW_EXPR();
checkmem($$);
- $$->Identifier = "?";
+ $$->Identifier = strdup("?");
$$->expr_type = A1TC_REFERENCE;
$$->meta_type = AMT_VALUE;
$$->value = $1;
@@ -972,8 +979,9 @@
asn1p_expr_add($$, $3);
}
| ComponentTypeLists ',' TOK_VBracketLeft ComponentTypeLists TOK_VBracketRight {
- $$ = $1;
+ $$ = $1;
asn1p_expr_add_many($$, $4);
+ asn1p_expr_free($4);
}
;
@@ -1225,6 +1233,8 @@
} else {
if($$->constraints) {
assert(!$2);
+ /* Check this : optConstraints is not used ?! */
+ asn1p_constraint_free($3);
} else {
$$->constraints = $3;
}
@@ -1316,6 +1326,7 @@
checkmem(ret == 0);
$$->expr_type = ASN_TYPE_ANY;
$$->meta_type = AMT_TYPE;
+ free($4);
}
| TOK_INSTANCE TOK_OF ComplexTypeReference {
$$ = NEW_EXPR();
@@ -1349,6 +1360,7 @@
ret = asn1p_ref_add_component($$, $3, RLT_UNKNOWN);
checkmem(ret == 0);
free($1);
+ free($3);
}
| ObjectClassReference '.' TypeRefName {
int ret;
@@ -1359,6 +1371,7 @@
ret = asn1p_ref_add_component($$, $3, RLT_UNKNOWN);
checkmem(ret == 0);
free($1);
+ free($3);
}
| TOK_typereference '.' Identifier {
int ret;
@@ -1369,6 +1382,7 @@
ret = asn1p_ref_add_component($$, $3, RLT_lowercase);
checkmem(ret == 0);
free($1);
+ free($3);
}
| ObjectClassReference {
int ret;
@@ -1438,14 +1452,17 @@
TOK_typefieldreference {
$$ = asn1p_ref_new(yylineno);
asn1p_ref_add_component($$, $1, RLT_AmpUppercase);
+ free($1);
}
| FieldName '.' TOK_typefieldreference {
$$ = $$;
asn1p_ref_add_component($$, $3, RLT_AmpUppercase);
+ free($3);
}
| FieldName '.' TOK_valuefieldreference {
$$ = $$;
asn1p_ref_add_component($$, $3, RLT_Amplowercase);
+ free($3);
}
;
@@ -1453,12 +1470,15 @@
TOK_capitalreference {
$$ = asn1p_ref_new(yylineno);
asn1p_ref_add_component($$, $1, RLT_CAPITALS);
+ free($1);
}
/*
| TypeRefName '.' TOK_capitalreference {
$$ = asn1p_ref_new(yylineno);
asn1p_ref_add_component($$, $1, RLT_AmpUppercase);
asn1p_ref_add_component($$, $3, RLT_CAPITALS);
+ free($1);
+ free($3);
}
*/
;
@@ -1515,10 +1535,12 @@
| TOK_bstring {
$$ = _convert_bitstring2binary($1, 'B');
checkmem($$);
+ free($1);
}
| TOK_hstring {
$$ = _convert_bitstring2binary($1, 'H');
checkmem($$);
+ free($1);
}
| RestrictedCharacterStringValue {
$$ = $$;
@@ -1849,6 +1871,7 @@
ref = asn1p_ref_new(yylineno);
asn1p_ref_add_component(ref, $2, RLT_lowercase);
$$->value = asn1p_value_fromref(ref, 0);
+ free($2);
}
;
@@ -1892,10 +1915,12 @@
TOK_bstring {
$$ = _convert_bitstring2binary($1, 'B');
checkmem($$);
+ free($1);
}
| TOK_hstring {
$$ = _convert_bitstring2binary($1, 'H');
checkmem($$);
+ free($1);
}
;
@@ -1993,6 +2018,7 @@
$$ = asn1p_constraint_new(yylineno);
$$->type = ACT_CT_CTNG;
$$->value = asn1p_value_fromtype($2);
+ asn1p_expr_free($2);
}
;
@@ -2026,6 +2052,7 @@
ct->type = ACT_EL_VALUE;
ct->value = asn1p_value_fromref(ref, 0);
CONSTRAINT_INSERT($$, ACT_CA_CRC, ct, 0);
+ free($2);
}
;
@@ -2094,6 +2121,8 @@
$$[l1] = '.';
memcpy($$ + l1 + 1, $3, l3);
$$[l1 + 1 + l3] = '\0';
+ free($1);
+ free($3);
}
;