From 5b34d656e6413a6a55e344f2c259b15e4bef8046 Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Fri, 23 Dec 2005 00:04:47 +0000 Subject: [PATCH] fix recursive inclusion seg fault git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8043 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Source/Swig/fragment.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Swig/fragment.c b/Source/Swig/fragment.c index fa467da0f..e8145b5f3 100644 --- a/Source/Swig/fragment.c +++ b/Source/Swig/fragment.c @@ -19,6 +19,7 @@ char cvsroot_fragment_c[] = "$Header$"; #include "swig.h" static Hash *fragments = 0; +static Hash *looking_fragments = 0; static int debug = 0; @@ -106,11 +107,16 @@ Swig_fragment_emit(Node *n) { while (tok) { String *name = NewString(tok); if (mangle) Append(name,mangle); + if (looking_fragments && Getattr(looking_fragments,name)) { + return; + } code = Getattr(fragments,name); if (debug) Printf(stdout,"looking subfragment %s\n", name); if (code && (Strcmp(code,"ignore") != 0)) { String *section = Getmeta(code,"section"); Hash *n = Getmeta(code,"kwargs"); + if (!looking_fragments) looking_fragments = NewHash(); + Setattr(looking_fragments,name,"1"); while (n) { if (Cmp(Getattr(n,"name"),"fragment") == 0) { if (debug) Printf(stdout,"emitting fragment %s %s\n",n, type); @@ -129,6 +135,7 @@ Swig_fragment_emit(Node *n) { Printf(f,"%s\n",code); if (debug) Printf(f,"/* end fragment %s */\n\n",name); Setattr(fragments,name,"ignore"); + Delattr(looking_fragments,name); } } } else {