Fix memory leak in SWIG's parser (based on patch from Russell

Bryant in SF#1914023).`


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10310 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Olly Betts 2008-03-17 00:36:35 +00:00
commit f881f98daf
4 changed files with 13 additions and 6 deletions

View file

@ -1,6 +1,10 @@
Version 1.3.35 (in progress)
============================
03/17/2008: olly
Fix memory leak in SWIG's parser (based on patch from Russell
Bryant in SF#1914023).`
03/12/2008: wsfulton
Fix bug #1878285 - unnecessary cast for C struct creation wrappers.

View file

@ -226,7 +226,6 @@ void Preprocessor_expr_init(void) {
}
void Preprocessor_expr_delete(void) {
Scanner_clear(scan);
DelScanner(scan);
}

View file

@ -44,7 +44,7 @@ Scanner *NewScanner() {
s->nexttoken = -1;
s->start_line = 1;
s->yylen = 0;
s->idstart = "";
s->idstart = NULL;
s->scanobjs = NewList();
s->text = NewStringEmpty();
s->str = 0;
@ -66,6 +66,7 @@ void DelScanner(Scanner * s) {
Delete(s->file);
Delete(s->error);
Delete(s->str);
free(s->idstart);
free(s);
}
@ -170,7 +171,8 @@ int Scanner_start_line(Scanner * s) {
* Change the set of additional characters that can be used to start an identifier.
* ----------------------------------------------------------------------------- */
void Scanner_idstart(Scanner * s, char *id) {
void Scanner_idstart(Scanner * s, const char *id) {
free(s->idstart);
s->idstart = Swig_copy_string(id);
}
@ -421,7 +423,8 @@ static int look(Scanner * s) {
/* Look for possible identifiers */
else if ((isalpha(c)) || (c == '_') || (strchr(s->idstart, c)))
else if ((isalpha(c)) || (c == '_') ||
(s->idstart && strchr(s->idstart, c)))
state = 7;
/* Look for single character symbols */
@ -640,7 +643,8 @@ static int look(Scanner * s) {
Setline(s->text, Getline(s->str));
Setfile(s->text, Getfile(s->str));
s->start_line = s->line;
} else if (strchr(s->idstart, '%') && ((isalpha(c)) || (c == '_'))) {
} else if (s->idstart && strchr(s->idstart, '%') &&
((isalpha(c)) || (c == '_'))) {
state = 7;
} else if (c == '=') {
return SWIG_TOKEN_MODEQUAL;

View file

@ -24,7 +24,7 @@ extern void Scanner_set_location(Scanner *, String *file, int line);
extern String *Scanner_file(Scanner *);
extern int Scanner_line(Scanner *);
extern int Scanner_start_line(Scanner *);
extern void Scanner_idstart(Scanner *, char *idchar);
extern void Scanner_idstart(Scanner *, const char *idchar);
extern String *Scanner_errmsg(Scanner *);
extern int Scanner_errline(Scanner *);
extern int Scanner_isoperator(int tokval);