Free memory allocated in asn1c_read_file_dependencies() and asn1c_deps_makelist()
diff --git a/libasn1compiler/asn1c_fdeps.c b/libasn1compiler/asn1c_fdeps.c
index 231a47c..1ecc313 100644
--- a/libasn1compiler/asn1c_fdeps.c
+++ b/libasn1compiler/asn1c_fdeps.c
@@ -140,6 +140,16 @@
 	return d;
 }
 
+static void
+asn1c_free_dep(asn1c_fdeps_t *d) {
+
+	if(d) {
+		if(d->filename) free(d->filename);
+		d->filename = 0;
+		free(d);
+	}
+}
+
 static int
 asn1c_dep_add(asn1c_fdeps_t *deps, asn1c_fdeps_t *d) {
 	int n;
@@ -180,7 +190,9 @@
 	if(deps->filename && deps->usage != FDEP_NOTUSED) {
 		d = asn1c_new_dep(deps->filename);
 		d->usage = deps->usage;
-		asn1c_dep_add(dlist, d);
+		if(!asn1c_dep_add(dlist, d)) {
+			asn1c_free_dep(d);
+		}
 	}
 
 	for(i = 0; i < deps->el_count; i++) {
@@ -188,10 +200,28 @@
 		d = asn1c_deps_makelist(deps->elements[i]);
 		assert(!d->filename);
 		for(j = 0; j < d->el_count; j++) {
-			asn1c_dep_add(dlist, d->elements[j]);
+			if(asn1c_dep_add(dlist, d->elements[j])) {
+				d->elements[j] = 0;
+			}
 		}
+		asn1c_deps_freelist(d);
 	}
 
 	return dlist;
 }
 
+void
+asn1c_deps_freelist(asn1c_fdeps_t *deps) {
+	if(deps) {
+		int i;
+		if(deps->elements) {
+			for(i = 0; i < deps->el_count; i++) {
+				asn1c_deps_freelist(deps->elements[i]);
+				deps->elements[i] = 0;
+			}
+			free(deps->elements);
+			deps->elements = 0;			
+		}
+		asn1c_free_dep(deps);
+	}
+}
diff --git a/libasn1compiler/asn1c_fdeps.h b/libasn1compiler/asn1c_fdeps.h
index 7986e34..cb5b12c 100644
--- a/libasn1compiler/asn1c_fdeps.h
+++ b/libasn1compiler/asn1c_fdeps.h
@@ -25,5 +25,6 @@
 	const char *data);
 
 asn1c_fdeps_t *asn1c_deps_makelist(asn1c_fdeps_t *deps);
+void asn1c_deps_freelist(asn1c_fdeps_t *deps);
 
 #endif	/* ASN1C_FDEPS_H */
diff --git a/libasn1compiler/asn1c_save.c b/libasn1compiler/asn1c_save.c
index f8348cc..4a422b5 100644
--- a/libasn1compiler/asn1c_save.c
+++ b/libasn1compiler/asn1c_save.c
@@ -149,6 +149,9 @@
 			safe_fprintf(mkf, "ASN_%s_%s+=%s\n",
 				what_class, what_kind, fname);
 		}
+
+		asn1c_deps_freelist(deps);
+		asn1c_deps_freelist(dlist);
 	}
 
 	if(need_to_generate_pdu_collection(arg)) {