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:
parent
6f497c2807
commit
f881f98daf
4 changed files with 13 additions and 6 deletions
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -226,7 +226,6 @@ void Preprocessor_expr_init(void) {
|
|||
}
|
||||
|
||||
void Preprocessor_expr_delete(void) {
|
||||
Scanner_clear(scan);
|
||||
DelScanner(scan);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue