From 66a8eabf7e7632fff446d1addffbc5a0f01723a4 Mon Sep 17 00:00:00 2001 From: Stefan Schippers Date: Thu, 24 Sep 2020 15:59:01 +0200 Subject: [PATCH] fix un-graceful termination of load_sym_def() in case of recursive schematics instantiating themselves. It was not allowed to unroll all hierarchy levels cleaning up allocated memory after issuing the max-hierarchy warning. --- src/save.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/save.c b/src/save.c index 98fab2a0..d4115445 100644 --- a/src/save.c +++ b/src/save.c @@ -1358,7 +1358,7 @@ int load_sym_def(const char *name, FILE *embed_fd) instdef[lastinstdef].name=NULL; my_strdup(352, &instdef[lastinstdef].name,name); - while(!endfile) + while(1) { if(fscanf(lcc[level].fd," %c",tag)==EOF) { if (level) { @@ -1370,6 +1370,7 @@ int load_sym_def(const char *name, FILE *embed_fd) continue; } else break; } + if(endfile) continue; incremented_level = 0; switch(tag[0]) { @@ -1782,7 +1783,7 @@ int load_sym_def(const char *name, FILE *embed_fd) } my_strdup(654, &lcc[level].prop_ptr, prop_ptr); my_strdup(657, &lcc[level].symname, symname); - dbg(1, "level incremented: level=%d, symname=%s, name4=%s\n", level, symname, name4); + dbg(1, "level incremented: level=%d, symname=%s, prop_ptr = %s name4=%s\n", level, symname, prop_ptr, name4); } break; case '[':