git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed bug in SWF parser
[swftools.git]
/
lib
/
rfxswf.c
diff --git
a/lib/rfxswf.c
b/lib/rfxswf.c
index
c4f42e8
..
2b46f53
100644
(file)
--- a/
lib/rfxswf.c
+++ b/
lib/rfxswf.c
@@
-93,7
+93,7
@@
char* swf_GetString(TAG*t)
U8 swf_GetU8(TAG * t)
{ swf_ResetReadBits(t);
#ifdef DEBUG_RFXSWF
U8 swf_GetU8(TAG * t)
{ swf_ResetReadBits(t);
#ifdef DEBUG_RFXSWF
- if (t->pos>=t->len)
+ if ((int)t->pos>=(int)t->len)
{ fprintf(stderr,"GetU8() out of bounds: TagID = %i\n",t->id);
return 0;
}
{ fprintf(stderr,"GetU8() out of bounds: TagID = %i\n",t->id);
return 0;
}
@@
-105,7
+105,7
@@
U16 swf_GetU16(TAG * t)
{ U16 res;
swf_ResetReadBits(t);
#ifdef DEBUG_RFXSWF
{ U16 res;
swf_ResetReadBits(t);
#ifdef DEBUG_RFXSWF
- if (t->pos>(t->len-2))
+ if ((int)t->pos>((int)t->len-2))
{ fprintf(stderr,"GetU16() out of bounds: TagID = %i\n",t->id);
return 0;
}
{ fprintf(stderr,"GetU16() out of bounds: TagID = %i\n",t->id);
return 0;
}
@@
-119,7
+119,7
@@
U32 swf_GetU32(TAG * t)
{ U32 res;
swf_ResetReadBits(t);
#ifdef DEBUG_RFXSWF
{ U32 res;
swf_ResetReadBits(t);
#ifdef DEBUG_RFXSWF
- if (t->pos>(t->len-4))
+ if ((int)t->pos>((int)t->len-4))
{ fprintf(stderr,"GetU32() out of bounds: TagID = %i\n",t->id);
return 0;
}
{ fprintf(stderr,"GetU32() out of bounds: TagID = %i\n",t->id);
return 0;
}
@@
-177,7
+177,9
@@
int swf_SetU16(TAG * t,U16 v)
void swf_SetS16(TAG * t,int v)
{
if(v>32767 || v<-32768) {
void swf_SetS16(TAG * t,int v)
{
if(v>32767 || v<-32768) {
+ #ifdef DEBUG_RFXSWF
fprintf(stderr, "Warning: S16 overflow: %d\n", v);
fprintf(stderr, "Warning: S16 overflow: %d\n", v);
+ #endif
}
swf_SetU16(t, (S16)v);
}
}
swf_SetU16(t, (S16)v);
}
@@
-415,7
+417,6
@@
float swf_GetF16(TAG * t)
U32 f2 = (f1&0x8000)<<16; //sign
f2 |= ((f1&0x7c00)<<13)+(0x40000000-(0x4000<<13)); //exp
f2 |= (f1&0x03ff)<<13; //mantissa
U32 f2 = (f1&0x8000)<<16; //sign
f2 |= ((f1&0x7c00)<<13)+(0x40000000-(0x4000<<13)); //exp
f2 |= (f1&0x03ff)<<13; //mantissa
- fprintf(stderr, "%f = %d-%d-%x\n", *(float*)&f2, f1>>15, (f1>>10)&31, f1&0x3ff);
return *(float*)&f2;
}
void swf_SetF16(TAG * t, float f)
return *(float*)&f2;
}
void swf_SetF16(TAG * t, float f)
@@
-658,7
+659,9
@@
int swf_SetRect(TAG * t,SRECT * r)
nbits = swf_CountBits(r->ymin,nbits);
nbits = swf_CountBits(r->ymax,nbits);
if(nbits>=32) {
nbits = swf_CountBits(r->ymin,nbits);
nbits = swf_CountBits(r->ymax,nbits);
if(nbits>=32) {
+ #ifdef DEBUG_RFXSWF
fprintf(stderr, "rfxswf: Warning: num_bits overflow in swf_SetRect\n");
fprintf(stderr, "rfxswf: Warning: num_bits overflow in swf_SetRect\n");
+ #endif
nbits=31;
}
nbits=31;
}
@@
-824,7
+827,9
@@
int swf_SetMatrix(TAG * t,MATRIX * m)
nbits = swf_CountBits(m->sy,nbits);
if(nbits>=32) {
/* TODO: happens on AMD64 systems for normal values? */
nbits = swf_CountBits(m->sy,nbits);
if(nbits>=32) {
/* TODO: happens on AMD64 systems for normal values? */
+ #ifdef DEBUG_RFXSWF
fprintf(stderr,"rfxswf: Error: matrix values too large\n");
fprintf(stderr,"rfxswf: Error: matrix values too large\n");
+ #endif
nbits = 31;
}
swf_SetBits(t,nbits,5);
nbits = 31;
}
swf_SetBits(t,nbits,5);
@@
-838,7
+843,9
@@
int swf_SetMatrix(TAG * t,MATRIX * m)
nbits = swf_CountBits(m->r0,0);
nbits = swf_CountBits(m->r1,nbits);
if(nbits>=32) {
nbits = swf_CountBits(m->r0,0);
nbits = swf_CountBits(m->r1,nbits);
if(nbits>=32) {
+ #ifdef DEBUG_RFXSWF
fprintf(stderr,"rfxswf: Error: matrix values too large\n");
fprintf(stderr,"rfxswf: Error: matrix values too large\n");
+ #endif
nbits = 31;
}
swf_SetBits(t,nbits,5);
nbits = 31;
}
swf_SetBits(t,nbits,5);
@@
-849,7
+856,9
@@
int swf_SetMatrix(TAG * t,MATRIX * m)
nbits = swf_CountBits(m->tx,0);
nbits = swf_CountBits(m->ty,nbits);
if(nbits>=32) {
nbits = swf_CountBits(m->tx,0);
nbits = swf_CountBits(m->ty,nbits);
if(nbits>=32) {
+ #ifdef DEBUG_RFXSWF
fprintf(stderr,"rfxswf: Error: matrix values too large\n");
fprintf(stderr,"rfxswf: Error: matrix values too large\n");
+ #endif
nbits = 31;
}
swf_SetBits(t,nbits,5);
nbits = 31;
}
swf_SetBits(t,nbits,5);
@@
-1133,7
+1142,9
@@
TAG * swf_ReadTag(reader_t*reader, TAG * prev)
{ t->data = (U8*)rfx_alloc(t->len);
t->memsize = t->len;
if (reader->read(reader, t->data, t->len) != t->len) {
{ t->data = (U8*)rfx_alloc(t->len);
t->memsize = t->len;
if (reader->read(reader, t->data, t->len) != t->len) {
+ #ifdef DEBUG_RFXSWF
fprintf(stderr, "rfxswf: Warning: Short read (tagid %d). File truncated?\n", t->id);
fprintf(stderr, "rfxswf: Warning: Short read (tagid %d). File truncated?\n", t->id);
+ #endif
free(t->data);t->data=0;
free(t);
return NULL;
free(t->data);t->data=0;
free(t);
return NULL;
@@
-1312,7
+1323,9
@@
void swf_FoldSprite(TAG * t)
if(t->id!=ST_DEFINESPRITE)
return;
if(!t->len) {
if(t->id!=ST_DEFINESPRITE)
return;
if(!t->len) {
+ #ifdef DEBUG_RFXSWF
fprintf(stderr, "Error: Sprite has no ID!");
fprintf(stderr, "Error: Sprite has no ID!");
+ #endif
return;
}
if(t->len>4) {
return;
}
if(t->len>4) {