git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added handling for incomplete tags during file reading.
[swftools.git]
/
lib
/
rfxswf.c
diff --git
a/lib/rfxswf.c
b/lib/rfxswf.c
index
ed94927
..
d7f8f88
100644
(file)
--- a/
lib/rfxswf.c
+++ b/
lib/rfxswf.c
@@
-54,8
+54,8
@@
void* rfx_alloc(int size)
{
void*ptr;
if(size == 0) {
{
void*ptr;
if(size == 0) {
- *(int*)0 = 0xdead;
- fprintf(stderr, "Warning: Zero alloc\n");
+ //*(int*)0 = 0xdead;
+ //fprintf(stderr, "Warning: Zero alloc\n");
return 0;
}
return 0;
}
@@
-71,8
+71,8
@@
void* rfx_realloc(void*data, int size)
{
void*ptr;
if(size == 0) {
{
void*ptr;
if(size == 0) {
- *(int*)0 = 0xdead;
- fprintf(stderr, "Warning: Zero realloc\n");
+ //*(int*)0 = 0xdead;
+ //fprintf(stderr, "Warning: Zero realloc\n");
rfx_free(data);
return 0;
}
rfx_free(data);
return 0;
}
@@
-93,8
+93,8
@@
void* rfx_calloc(int size)
{
void*ptr;
if(size == 0) {
{
void*ptr;
if(size == 0) {
- *(int*)0 = 0xdead;
- fprintf(stderr, "Warning: Zero alloc\n");
+ //*(int*)0 = 0xdead;
+ //fprintf(stderr, "Warning: Zero alloc\n");
return 0;
}
#ifdef HAVE_CALLOC
return 0;
}
#ifdef HAVE_CALLOC
@@
-916,7
+916,12
@@
TAG * swf_ReadTag(struct reader_t*reader, TAG * prev)
if (t->len)
{ t->data = (U8*)rfx_alloc(t->len);
t->memsize = t->len;
if (t->len)
{ t->data = (U8*)rfx_alloc(t->len);
t->memsize = t->len;
- if (reader->read(reader, t->data, t->len) != t->len) return NULL;
+ if (reader->read(reader, t->data, t->len) != t->len) {
+ fprintf(stderr, "rfxswf: Warning: Short read (tagid %d). File truncated?\n", t->id);
+ free(t->data);t->data=0;
+ free(t);
+ return NULL;
+ }
}
if (prev)
}
if (prev)
@@
-1310,6
+1315,10
@@
int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file,
len += swf_WriteTag(-1,t);
if(t->id == ST_DEFINESPRITE && !swf_IsFolded(t)) inSprite++;
else if(t->id == ST_END && inSprite) inSprite--;
len += swf_WriteTag(-1,t);
if(t->id == ST_DEFINESPRITE && !swf_IsFolded(t)) inSprite++;
else if(t->id == ST_END && inSprite) inSprite--;
+ else if(t->id == ST_END && !inSprite) {
+ if(t->prev && t->prev->id!=ST_SHOWFRAME)
+ frameCount++;
+ }
else if(t->id == ST_SHOWFRAME && !inSprite) frameCount++;
t = swf_NextTag(t);
}
else if(t->id == ST_SHOWFRAME && !inSprite) frameCount++;
t = swf_NextTag(t);
}