diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-03-11 15:05:46 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-03-11 15:05:46 -0300 |
commit | e9763842134ac807262e3b86d5f40d25a8d69f1b (patch) | |
tree | 30ae76f6e935fc09dbce8b247b7c31182a76922d | |
parent | 68f4ccdd00edac2a1b02878f0ef6fa32e8893857 (diff) | |
download | lua-e9763842134ac807262e3b86d5f40d25a8d69f1b.tar.gz lua-e9763842134ac807262e3b86d5f40d25a8d69f1b.tar.bz2 lua-e9763842134ac807262e3b86d5f40d25a8d69f1b.zip |
keep chunk's headers compatible at least up to LUAC_VERSION (to be
able to detect correctly version mismatches)
-rw-r--r-- | ldump.c | 8 | ||||
-rw-r--r-- | lundump.c | 15 |
2 files changed, 13 insertions, 10 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ldump.c,v 2.24 2014/03/01 15:18:44 roberto Exp roberto $ | 2 | ** $Id: ldump.c,v 2.25 2014/03/10 17:56:32 roberto Exp roberto $ |
3 | ** save precompiled Lua chunks | 3 | ** save precompiled Lua chunks |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -160,11 +160,13 @@ static void DumpFunction (const Proto *f, DumpState *D) { | |||
160 | } | 160 | } |
161 | 161 | ||
162 | 162 | ||
163 | #define DumpLiteral(s,D) DumpBlock(s, sizeof(s) - sizeof(char), D) | ||
164 | |||
163 | static void DumpHeader (DumpState *D) { | 165 | static void DumpHeader (DumpState *D) { |
164 | DumpBlock(LUA_SIGNATURE, sizeof(LUA_SIGNATURE), D); | 166 | DumpLiteral(LUA_SIGNATURE, D); |
165 | DumpBlock(LUAC_DATA, sizeof(LUAC_DATA), D); | ||
166 | DumpByte(LUAC_VERSION, D); | 167 | DumpByte(LUAC_VERSION, D); |
167 | DumpByte(LUAC_FORMAT, D); | 168 | DumpByte(LUAC_FORMAT, D); |
169 | DumpLiteral(LUAC_DATA, D); | ||
168 | DumpByte(sizeof(int), D); | 170 | DumpByte(sizeof(int), D); |
169 | DumpByte(sizeof(size_t), D); | 171 | DumpByte(sizeof(size_t), D); |
170 | DumpByte(sizeof(Instruction), D); | 172 | DumpByte(sizeof(Instruction), D); |
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lundump.c,v 2.31 2014/03/10 17:56:32 roberto Exp roberto $ | 2 | ** $Id: lundump.c,v 2.32 2014/03/10 19:50:19 roberto Exp roberto $ |
3 | ** load precompiled Lua chunks | 3 | ** load precompiled Lua chunks |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -195,10 +195,11 @@ static void LoadFunction (LoadState *S, Proto *f) { | |||
195 | } | 195 | } |
196 | 196 | ||
197 | 197 | ||
198 | static void checkstring (LoadState *S, const char *s, const char *msg) { | 198 | static void checkliteral (LoadState *S, const char *s, const char *msg) { |
199 | char buff[sizeof(LUA_SIGNATURE) + sizeof(LUAC_DATA)]; /* larger than each */ | 199 | char buff[sizeof(LUA_SIGNATURE) + sizeof(LUAC_DATA)]; /* larger than both */ |
200 | LoadVector(S, buff, strlen(s) + 1); | 200 | int len = strlen(s); |
201 | if (strcmp(s, buff) != 0) | 201 | LoadVector(S, buff, len); |
202 | if (memcmp(s, buff, len) != 0) | ||
202 | error(S, msg); | 203 | error(S, msg); |
203 | } | 204 | } |
204 | 205 | ||
@@ -212,12 +213,12 @@ static void fchecksize (LoadState *S, size_t size, const char *tname) { | |||
212 | #define checksize(S,t) fchecksize(S,sizeof(t),#t) | 213 | #define checksize(S,t) fchecksize(S,sizeof(t),#t) |
213 | 214 | ||
214 | static void checkHeader (LoadState *S) { | 215 | static void checkHeader (LoadState *S) { |
215 | checkstring(S, LUA_SIGNATURE + 1, "not a"); | 216 | checkliteral(S, LUA_SIGNATURE + 1, "not a"); /* 1st char already checked */ |
216 | checkstring(S, LUAC_DATA, "corrupted"); | ||
217 | if (LoadByte(S) != LUAC_VERSION) | 217 | if (LoadByte(S) != LUAC_VERSION) |
218 | error(S, "version mismatch in"); | 218 | error(S, "version mismatch in"); |
219 | if (LoadByte(S) != LUAC_FORMAT) | 219 | if (LoadByte(S) != LUAC_FORMAT) |
220 | error(S, "format mismatch in"); | 220 | error(S, "format mismatch in"); |
221 | checkliteral(S, LUAC_DATA, "corrupted"); | ||
221 | checksize(S, int); | 222 | checksize(S, int); |
222 | checksize(S, size_t); | 223 | checksize(S, size_t); |
223 | checksize(S, Instruction); | 224 | checksize(S, Instruction); |