diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2013-08-30 12:49:41 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2013-08-30 12:49:41 -0300 |
commit | c23f7053495934bc7fbce7328af1e7f03f248de1 (patch) | |
tree | 468daa5084acc92a1453d67048568a56ce875d81 /llex.c | |
parent | 42cf5f8214edf45400c7e4abd6faef27cf424801 (diff) | |
download | lua-c23f7053495934bc7fbce7328af1e7f03f248de1.tar.gz lua-c23f7053495934bc7fbce7328af1e7f03f248de1.tar.bz2 lua-c23f7053495934bc7fbce7328af1e7f03f248de1.zip |
BUG: GC can collect a long string still in use during parser
Diffstat (limited to 'llex.c')
-rw-r--r-- | llex.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: llex.c,v 2.63 2013/03/16 21:10:18 roberto Exp $ | 2 | ** $Id: llex.c,v 2.63.1.1 2013/04/12 18:48:47 roberto Exp roberto $ |
3 | ** Lexical Analyzer | 3 | ** Lexical Analyzer |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -133,6 +133,9 @@ TString *luaX_newstring (LexState *ls, const char *str, size_t l) { | |||
133 | setbvalue(o, 1); /* t[string] = true */ | 133 | setbvalue(o, 1); /* t[string] = true */ |
134 | luaC_checkGC(L); | 134 | luaC_checkGC(L); |
135 | } | 135 | } |
136 | else { /* string already present */ | ||
137 | ts = rawtsvalue(keyfromval(o)); /* re-use value previously stored */ | ||
138 | } | ||
136 | L->top--; /* remove string from stack */ | 139 | L->top--; /* remove string from stack */ |
137 | return ts; | 140 | return ts; |
138 | } | 141 | } |