Update of /cvsroot/plib/plib/src/psl
In directory usw-pr-cvs1:/tmp/cvs-serv19952/plib/src/psl
Modified Files:
pslCompiler.h pslProgram.cxx
Log Message:
Fixed double-delete problem that crashed PSL applications when a pslProgram
was deleted.
Index: pslCompiler.h
===================================================================
RCS file: /cvsroot/plib/plib/src/psl/pslCompiler.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- pslCompiler.h 22 Sep 2002 18:25:16 -0000 1.31
+++ pslCompiler.h 30 Oct 2002 12:32:58 -0000 1.32
@@ -40,6 +40,8 @@
return symbol != NULL && strcmp ( s, symbol ) == 0 ;
}
+ pslFwdRef () { symbol = NULL ; }
+ ~pslFwdRef () { delete [] symbol ; }
} ;
@@ -334,9 +336,9 @@
{
delete [] define_token [ i ] ;
delete [] define_replacement [ i ] ;
- delete [] symtab [ i ] . symbol ;
- delete [] code_symtab [ i ] . symbol ;
- delete [] forward_ref [ i ] . symbol ;
+ delete [] symtab [ i ] . symbol ; symtab [ i ] . symbol = NULL ;
+ delete [] code_symtab [ i ] . symbol ; code_symtab [ i ] . symbol = NULL ;
+ delete [] forward_ref [ i ] . symbol ; forward_ref [ i ] . symbol = NULL ;
}
}
Index: pslProgram.cxx
===================================================================
RCS file: /cvsroot/plib/plib/src/psl/pslProgram.cxx,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- pslProgram.cxx 22 Sep 2002 15:22:21 -0000 1.15
+++ pslProgram.cxx 30 Oct 2002 12:32:59 -0000 1.16
@@ -36,7 +36,7 @@
progName = NULL ;
- if ( _prgnm == NULL ) _prgnm = "PSLptogram" ;
+ if ( _prgnm == NULL ) _prgnm = "PSLprogram" ;
setProgName ( _prgnm ) ;
@@ -67,6 +67,9 @@
setProgName ( _prgnm ) ;
+ /* This will fail if this pslProgram is ever deleted */
+ /* We need ref-counting on code/compiler */
+
code = src -> getCode () ;
compiler = src -> getCompiler () ;
extensions = src -> getExtensions () ;
@@ -79,6 +82,9 @@
pslProgram::~pslProgram ()
{
+ /* This will fail if this pslProgram was copy-constructed */
+ /* We need ref-counting on code/compiler */
+ /* DEBUG-ME! */
delete [] progName ;
delete compiler ;
delete context ;
|