Index: lua-5.1.4/src/ldump.c =================================================================== --- lua-5.1.4.orig/src/ldump.c 2008-08-24 16:48:20.000000000 +0200 +++ lua-5.1.4/src/ldump.c 2008-08-24 16:48:52.000000000 +0200 @@ -67,12 +67,12 @@ { if (s==NULL || getstr(s)==NULL) { - size_t size=0; + unsigned int size=0; DumpVar(size,D); } else { - size_t size=s->tsv.len+1; /* include trailing '\0' */ + unsigned int size=s->tsv.len+1; /* include trailing '\0' */ DumpVar(size,D); DumpBlock(getstr(s),size,D); } Index: lua-5.1.4/src/lundump.c =================================================================== --- lua-5.1.4.orig/src/lundump.c 2008-08-24 16:48:20.000000000 +0200 +++ lua-5.1.4/src/lundump.c 2008-08-24 16:48:52.000000000 +0200 @@ -25,6 +25,7 @@ ZIO* Z; Mbuffer* b; const char* name; + int swap; } LoadState; #ifdef LUAC_TRUST_BINARIES @@ -40,7 +41,6 @@ } #endif -#define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size)) #define LoadByte(S) (lu_byte)LoadChar(S) #define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x)) #define LoadVector(S,b,n,size) LoadMem(S,b,n,size) @@ -51,6 +51,49 @@ IF (r!=0, "unexpected end"); } +static void LoadMem (LoadState* S, void* b, int n, size_t size) +{ + LoadBlock(S,b,n*size); + if (S->swap) + { + char* p=(char*) b; + char c; + switch (size) + { + case 1: + break; + case 2: + while (n--) + { + c=p[0]; p[0]=p[1]; p[1]=c; + p+=2; + } + break; + case 4: + while (n--) + { + c=p[0]; p[0]=p[3]; p[3]=c; + c=p[1]; p[1]=p[2]; p[2]=c; + p+=4; + } + break; + case 8: + while (n--) + { + c=p[0]; p[0]=p[7]; p[7]=c; + c=p[1]; p[1]=p[6]; p[6]=c; + c=p[2]; p[2]=p[5]; p[5]=c; + c=p[3]; p[3]=p[4]; p[4]=c; + p+=8; + } + break; + default: + IF(1, "bad size"); + break; + } + } +} + static int LoadChar(LoadState* S) { char x; @@ -82,7 +125,7 @@ static TString* LoadString(LoadState* S) { - size_t size; + unsigned int size; LoadVar(S,size); if (size==0) return NULL; @@ -196,6 +239,7 @@ char s[LUAC_HEADERSIZE]; luaU_header(h); LoadBlock(S,s,LUAC_HEADERSIZE); + S->swap=(s[6]!=h[6]); s[6]=h[6]; IF (memcmp(h,s,LUAC_HEADERSIZE)!=0, "bad header"); } @@ -230,7 +274,7 @@ *h++=(char)LUAC_FORMAT; *h++=(char)*(char*)&x; /* endianness */ *h++=(char)sizeof(int); - *h++=(char)sizeof(size_t); + *h++=(char)sizeof(unsigned int); *h++=(char)sizeof(Instruction); *h++=(char)sizeof(lua_Number);