X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Frfxswf.c;h=580a55d768cb1d3fbf4ced3c1922d8c90c6c36a3;hp=beef81e75d618734b4c8d931b262ee97fdf95599;hb=1450e6bbd2d56405dc90a6063635d80ca92e910e;hpb=a1cb9cb40f74933888e5593dbd62f72707228ed2 diff --git a/lib/rfxswf.c b/lib/rfxswf.c index beef81e..580a55d 100644 --- a/lib/rfxswf.c +++ b/lib/rfxswf.c @@ -54,8 +54,8 @@ void* rfx_alloc(int size) { 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; } @@ -71,8 +71,8 @@ void* rfx_realloc(void*data, int size) { 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; } @@ -93,8 +93,8 @@ void* rfx_calloc(int size) { 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 @@ -120,6 +120,16 @@ void rfx_free(void*ptr) free(ptr); } +#ifdef MEMORY_INFO +long rfx_memory_used() +{ +} + +char* rfx_memory_used_str() +{ +} +#endif + // internal constants #define MALLOC_SIZE 128 @@ -532,11 +542,11 @@ void swf_ExpandRect3(SRECT*src, SPOINT center, int radius) if(center.x - radius < src->xmin) src->xmin = center.x - radius; if(center.x + radius > src->xmax) - src->xmax = center.x - radius; + src->xmax = center.x + radius; if(center.y - radius < src->ymin) src->ymin = center.y - radius; if(center.y + radius > src->ymax) - src->ymax = center.y - radius; + src->ymax = center.y + radius; } SPOINT swf_TurnPoint(SPOINT p, MATRIX* m) { @@ -549,6 +559,8 @@ SRECT swf_TurnRect(SRECT r, MATRIX* m) { SRECT g; SPOINT p1,p2,p3,p4,pp1,pp2,pp3,pp4; + if(!m) + return r; p1.x = r.xmin;p1.y = r.ymin; p2.x = r.xmax;p2.y = r.ymin; p3.x = r.xmin;p3.y = r.ymax; @@ -656,7 +668,7 @@ int swf_SetMatrix(TAG * t,MATRIX * m) return 0; } -int swf_GetCXForm(TAG * t,CXFORM * cx,U8 alpha) //FIXME: alpha should be type bool +int swf_GetCXForm(TAG * t,CXFORM * cx,U8 alpha) { CXFORM cxf; int hasadd; int hasmul; @@ -770,6 +782,7 @@ void swf_SetPassword(TAG * t, const char * password) fprintf(stderr, "rfxswf: Warning- no usable random generator found\n"); fprintf(stderr, "Your password will be vulnerable to dictionary attacks\n"); #endif + salt[2] = 0; md5string = crypt_md5(password, salt); @@ -916,7 +929,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 (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) @@ -1212,7 +1230,10 @@ void swf_OptimizeTagOrder(SWF*swf) tag->next = level0; tag->prev = level0->prev; level0->prev = tag; - tag->prev->next = tag; + if(tag->prev) + tag->prev->next = tag; + else + swf->firstTag = tag; changes = 1; } } @@ -1294,9 +1315,11 @@ int swf_WriteSWF2(struct writer_t*writer, SWF * swf) // Writes SWF to file, #ifdef INSERT_RFX_TAG - if (swf->firstTag && swf_NextTag(swf->firstTag)) - if (swf_GetTagID(swf_NextTag(swf->firstTag))!=ST_REFLEX) + if (swf->firstTag && swf->firstTag->next && + (swf->firstTag->id != ST_REFLEX || swf->firstTag->next->id != ST_REFLEX) + ) { swf_SetBlock(swf_InsertTagBefore(swf, swf->firstTag,ST_REFLEX),"rfx",3); + } #endif // INSERT_RFX_TAG @@ -1414,6 +1437,7 @@ int swf_WriteSWF(int handle, SWF * swf) // Writes SWF to file, returns leng if(handle<0) { writer_init_nullwriter(&writer); len = swf_WriteSWF2(&writer, swf); + return len; } writer_init_filewriter(&writer, handle); len = swf_WriteSWF2(&writer, swf); @@ -1471,6 +1495,23 @@ int swf_WriteCGI(SWF * swf) return swf_WriteSWF(fileno(stdout),swf); } +SWF* swf_CopySWF(SWF*swf) +{ + SWF*nswf = rfx_alloc(sizeof(SWF)); + TAG*tag, *ntag; + memcpy(nswf, swf, sizeof(SWF)); + nswf->firstTag = 0; + tag = swf->firstTag; + ntag = 0; + while(tag) { + ntag = swf_CopyTag(ntag, tag); + if(!nswf->firstTag) + nswf->firstTag = ntag; + tag = tag->next; + } + return nswf; +} + void swf_FreeTags(SWF * swf) // Frees all malloc'ed memory for tags { TAG * t = swf->firstTag; @@ -1497,3 +1538,4 @@ void swf_FreeTags(SWF * swf) // Frees all malloc'ed memory for t #include "modules/swfaction.c" #include "modules/swfsound.c" #include "modules/swfdraw.c" +#include "modules/swfrender.c"