fixed duplicate ST_REFLEX handling
[swftools.git] / lib / rfxswf.c
index dbf0cd6..2a4b2e2 100644 (file)
@@ -61,8 +61,8 @@ void* rfx_alloc(int size)
 
   ptr = malloc(size);
   if(!ptr) {
-    fprintf(stderr, "FATAL: Out of memory\n");
-    /* TODO: we should send a signal, so that the debugger kicks in */
+    fprintf(stderr, "FATAL: Out of memory (while trying to claim %d bytes)\n", size);
+    /* TODO: we should send a signal, so that the debugger kicks in? */
     exit(1);
   }
   return ptr;
@@ -83,8 +83,8 @@ void* rfx_realloc(void*data, int size)
   }
 
   if(!ptr) {
-    fprintf(stderr, "FATAL: Out of memory\n");
-    /* TODO: we should send a signal, so that the debugger kicks in */
+    fprintf(stderr, "FATAL: Out of memory (while trying to claim %d bytes)\n", size);
+    /* TODO: we should send a signal, so that the debugger kicks in? */
     exit(1);
   }
   return ptr;
@@ -103,8 +103,8 @@ void* rfx_calloc(int size)
   ptr = malloc(size);
 #endif
   if(!ptr) {
-    fprintf(stderr, "FATAL: Out of memory\n");
-    /* TODO: we should send a signal, so that the debugger kicks in */
+    fprintf(stderr, "FATAL: Out of memory (while trying to claim %d bytes)\n", size);
+    /* TODO: we should send a signal, so that the debugger kicks in? */
     exit(1);
   }
 #ifndef HAVE_CALLOC
@@ -668,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;
@@ -782,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);
 
@@ -1314,9 +1315,9 @@ int  swf_WriteSWF2(struct writer_t*writer, SWF * swf)     // Writes SWF to file,
 
 #ifdef INSERT_RFX_TAG
 
-  if (swf->firstTag && swf->firstTag->next &&
-      (swf->firstTag->id != ST_REFLEX || swf->firstTag->next->id != ST_REFLEX)
-     ) {
+  if ((swf->firstTag && swf->firstTag->id != ST_REFLEX) &&
+      (!swf->firstTag->next || swf->firstTag->next->id != ST_REFLEX)) 
+  {
       swf_SetBlock(swf_InsertTagBefore(swf, swf->firstTag,ST_REFLEX),"rfx",3);
   }
 
@@ -1436,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);