diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2025-02-20 10:09:04 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2025-02-20 10:09:04 -0300 |
commit | e5f4927a0b97015d4c22bc22fbf80fb2c11ca7cc (patch) | |
tree | e1eb9c4c8f5c66fdd81506fcc94a02ed0e96a48d /lundump.c | |
parent | cd38fe8cf3b0f54dcc1d4a21a7a9cb585c46a43e (diff) | |
download | lua-e5f4927a0b97015d4c22bc22fbf80fb2c11ca7cc.tar.gz lua-e5f4927a0b97015d4c22bc22fbf80fb2c11ca7cc.tar.bz2 lua-e5f4927a0b97015d4c22bc22fbf80fb2c11ca7cc.zip |
Array sizes in undump changed from unsigned to int
Array sizes are always int and are dumped as int, so there is no reason
to read them back as unsigned.
Diffstat (limited to 'lundump.c')
-rw-r--r-- | lundump.c | 57 |
1 files changed, 25 insertions, 32 deletions
@@ -52,7 +52,7 @@ static l_noret error (LoadState *S, const char *why) { | |||
52 | ** All high-level loads go through loadVector; you can change it to | 52 | ** All high-level loads go through loadVector; you can change it to |
53 | ** adapt to the endianness of the input | 53 | ** adapt to the endianness of the input |
54 | */ | 54 | */ |
55 | #define loadVector(S,b,n) loadBlock(S,b,(n)*sizeof((b)[0])) | 55 | #define loadVector(S,b,n) loadBlock(S,b,cast_sizet(n)*sizeof((b)[0])) |
56 | 56 | ||
57 | static void loadBlock (LoadState *S, void *b, size_t size) { | 57 | static void loadBlock (LoadState *S, void *b, size_t size) { |
58 | if (luaZ_read(S->Z, b, size) != 0) | 58 | if (luaZ_read(S->Z, b, size) != 0) |
@@ -71,7 +71,7 @@ static void loadAlign (LoadState *S, unsigned align) { | |||
71 | } | 71 | } |
72 | 72 | ||
73 | 73 | ||
74 | #define getaddr(S,n,t) cast(t *, getaddr_(S,(n) * sizeof(t))) | 74 | #define getaddr(S,n,t) cast(t *, getaddr_(S,cast_sizet(n) * sizeof(t))) |
75 | 75 | ||
76 | static const void *getaddr_ (LoadState *S, size_t size) { | 76 | static const void *getaddr_ (LoadState *S, size_t size) { |
77 | const void *block = luaZ_getaddr(S->Z, size); | 77 | const void *block = luaZ_getaddr(S->Z, size); |
@@ -113,13 +113,6 @@ static size_t loadSize (LoadState *S) { | |||
113 | } | 113 | } |
114 | 114 | ||
115 | 115 | ||
116 | /* | ||
117 | ** Read an non-negative int */ | ||
118 | static unsigned loadUint (LoadState *S) { | ||
119 | return cast_uint(loadVarint(S, cast_sizet(INT_MAX))); | ||
120 | } | ||
121 | |||
122 | |||
123 | static int loadInt (LoadState *S) { | 116 | static int loadInt (LoadState *S) { |
124 | return cast_int(loadVarint(S, cast_sizet(INT_MAX))); | 117 | return cast_int(loadVarint(S, cast_sizet(INT_MAX))); |
125 | } | 118 | } |
@@ -188,15 +181,15 @@ static void loadString (LoadState *S, Proto *p, TString **sl) { | |||
188 | 181 | ||
189 | 182 | ||
190 | static void loadCode (LoadState *S, Proto *f) { | 183 | static void loadCode (LoadState *S, Proto *f) { |
191 | unsigned n = loadUint(S); | 184 | int n = loadInt(S); |
192 | loadAlign(S, sizeof(f->code[0])); | 185 | loadAlign(S, sizeof(f->code[0])); |
193 | if (S->fixed) { | 186 | if (S->fixed) { |
194 | f->code = getaddr(S, n, Instruction); | 187 | f->code = getaddr(S, n, Instruction); |
195 | f->sizecode = cast_int(n); | 188 | f->sizecode = n; |
196 | } | 189 | } |
197 | else { | 190 | else { |
198 | f->code = luaM_newvectorchecked(S->L, n, Instruction); | 191 | f->code = luaM_newvectorchecked(S->L, n, Instruction); |
199 | f->sizecode = cast_int(n); | 192 | f->sizecode = n; |
200 | loadVector(S, f->code, n); | 193 | loadVector(S, f->code, n); |
201 | } | 194 | } |
202 | } | 195 | } |
@@ -206,10 +199,10 @@ static void loadFunction(LoadState *S, Proto *f); | |||
206 | 199 | ||
207 | 200 | ||
208 | static void loadConstants (LoadState *S, Proto *f) { | 201 | static void loadConstants (LoadState *S, Proto *f) { |
209 | unsigned i; | 202 | int i; |
210 | unsigned n = loadUint(S); | 203 | int n = loadInt(S); |
211 | f->k = luaM_newvectorchecked(S->L, n, TValue); | 204 | f->k = luaM_newvectorchecked(S->L, n, TValue); |
212 | f->sizek = cast_int(n); | 205 | f->sizek = n; |
213 | for (i = 0; i < n; i++) | 206 | for (i = 0; i < n; i++) |
214 | setnilvalue(&f->k[i]); | 207 | setnilvalue(&f->k[i]); |
215 | for (i = 0; i < n; i++) { | 208 | for (i = 0; i < n; i++) { |
@@ -248,10 +241,10 @@ static void loadConstants (LoadState *S, Proto *f) { | |||
248 | 241 | ||
249 | 242 | ||
250 | static void loadProtos (LoadState *S, Proto *f) { | 243 | static void loadProtos (LoadState *S, Proto *f) { |
251 | unsigned i; | 244 | int i; |
252 | unsigned n = loadUint(S); | 245 | int n = loadInt(S); |
253 | f->p = luaM_newvectorchecked(S->L, n, Proto *); | 246 | f->p = luaM_newvectorchecked(S->L, n, Proto *); |
254 | f->sizep = cast_int(n); | 247 | f->sizep = n; |
255 | for (i = 0; i < n; i++) | 248 | for (i = 0; i < n; i++) |
256 | f->p[i] = NULL; | 249 | f->p[i] = NULL; |
257 | for (i = 0; i < n; i++) { | 250 | for (i = 0; i < n; i++) { |
@@ -269,10 +262,10 @@ static void loadProtos (LoadState *S, Proto *f) { | |||
269 | ** in that case all prototypes must be consistent for the GC. | 262 | ** in that case all prototypes must be consistent for the GC. |
270 | */ | 263 | */ |
271 | static void loadUpvalues (LoadState *S, Proto *f) { | 264 | static void loadUpvalues (LoadState *S, Proto *f) { |
272 | unsigned i; | 265 | int i; |
273 | unsigned n = loadUint(S); | 266 | int n = loadInt(S); |
274 | f->upvalues = luaM_newvectorchecked(S->L, n, Upvaldesc); | 267 | f->upvalues = luaM_newvectorchecked(S->L, n, Upvaldesc); |
275 | f->sizeupvalues = cast_int(n); | 268 | f->sizeupvalues = n; |
276 | for (i = 0; i < n; i++) /* make array valid for GC */ | 269 | for (i = 0; i < n; i++) /* make array valid for GC */ |
277 | f->upvalues[i].name = NULL; | 270 | f->upvalues[i].name = NULL; |
278 | for (i = 0; i < n; i++) { /* following calls can raise errors */ | 271 | for (i = 0; i < n; i++) { /* following calls can raise errors */ |
@@ -284,33 +277,33 @@ static void loadUpvalues (LoadState *S, Proto *f) { | |||
284 | 277 | ||
285 | 278 | ||
286 | static void loadDebug (LoadState *S, Proto *f) { | 279 | static void loadDebug (LoadState *S, Proto *f) { |
287 | unsigned i; | 280 | int i; |
288 | unsigned n = loadUint(S); | 281 | int n = loadInt(S); |
289 | if (S->fixed) { | 282 | if (S->fixed) { |
290 | f->lineinfo = getaddr(S, n, ls_byte); | 283 | f->lineinfo = getaddr(S, n, ls_byte); |
291 | f->sizelineinfo = cast_int(n); | 284 | f->sizelineinfo = n; |
292 | } | 285 | } |
293 | else { | 286 | else { |
294 | f->lineinfo = luaM_newvectorchecked(S->L, n, ls_byte); | 287 | f->lineinfo = luaM_newvectorchecked(S->L, n, ls_byte); |
295 | f->sizelineinfo = cast_int(n); | 288 | f->sizelineinfo = n; |
296 | loadVector(S, f->lineinfo, n); | 289 | loadVector(S, f->lineinfo, n); |
297 | } | 290 | } |
298 | n = loadUint(S); | 291 | n = loadInt(S); |
299 | if (n > 0) { | 292 | if (n > 0) { |
300 | loadAlign(S, sizeof(int)); | 293 | loadAlign(S, sizeof(int)); |
301 | if (S->fixed) { | 294 | if (S->fixed) { |
302 | f->abslineinfo = getaddr(S, n, AbsLineInfo); | 295 | f->abslineinfo = getaddr(S, n, AbsLineInfo); |
303 | f->sizeabslineinfo = cast_int(n); | 296 | f->sizeabslineinfo = n; |
304 | } | 297 | } |
305 | else { | 298 | else { |
306 | f->abslineinfo = luaM_newvectorchecked(S->L, n, AbsLineInfo); | 299 | f->abslineinfo = luaM_newvectorchecked(S->L, n, AbsLineInfo); |
307 | f->sizeabslineinfo = cast_int(n); | 300 | f->sizeabslineinfo = n; |
308 | loadVector(S, f->abslineinfo, n); | 301 | loadVector(S, f->abslineinfo, n); |
309 | } | 302 | } |
310 | } | 303 | } |
311 | n = loadUint(S); | 304 | n = loadInt(S); |
312 | f->locvars = luaM_newvectorchecked(S->L, n, LocVar); | 305 | f->locvars = luaM_newvectorchecked(S->L, n, LocVar); |
313 | f->sizelocvars = cast_int(n); | 306 | f->sizelocvars = n; |
314 | for (i = 0; i < n; i++) | 307 | for (i = 0; i < n; i++) |
315 | f->locvars[i].varname = NULL; | 308 | f->locvars[i].varname = NULL; |
316 | for (i = 0; i < n; i++) { | 309 | for (i = 0; i < n; i++) { |
@@ -318,9 +311,9 @@ static void loadDebug (LoadState *S, Proto *f) { | |||
318 | f->locvars[i].startpc = loadInt(S); | 311 | f->locvars[i].startpc = loadInt(S); |
319 | f->locvars[i].endpc = loadInt(S); | 312 | f->locvars[i].endpc = loadInt(S); |
320 | } | 313 | } |
321 | n = loadUint(S); | 314 | n = loadInt(S); |
322 | if (n != 0) /* does it have debug information? */ | 315 | if (n != 0) /* does it have debug information? */ |
323 | n = cast_uint(f->sizeupvalues); /* must be this many */ | 316 | n = f->sizeupvalues; /* must be this many */ |
324 | for (i = 0; i < n; i++) | 317 | for (i = 0; i < n; i++) |
325 | loadString(S, f, &f->upvalues[i].name); | 318 | loadString(S, f, &f->upvalues[i].name); |
326 | } | 319 | } |