fixed bug in swf_OptimizeTagOrder().
[swftools.git] / lib / rfxswf.c
index ae33ad5..4a409ac 100644 (file)
@@ -1229,7 +1229,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;
        }
       }
@@ -1311,9 +1314,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
 
@@ -1499,6 +1504,7 @@ SWF* swf_CopySWF(SWF*swf)
         ntag = swf_CopyTag(ntag, tag);
         if(!nswf->firstTag)
             nswf->firstTag = ntag;
+        tag = tag->next;
     }
     return nswf;
 }