fixed avm3 detection
[swftools.git] / lib / rfxswf.c
index d75868d..b540cf1 100644 (file)
@@ -1296,13 +1296,14 @@ int  swf_WriteSWF2(writer_t*writer, SWF * swf)     // Writes SWF to file, return
   writer_t zwriter;
   int fileSize = 0;
   int inSprite = 0;
-  int writer_lastpos = 0;
   int ret;
+  writer_t*original_writer = writer;
+  int writer_lastpos = 0;
     
   if (!swf) return -1;
   if (!writer) return -1; // the caller should provide a nullwriter, not 0, for querying SWF size
 
-  if(writer) writer_lastpos = writer->pos;
+  if(original_writer) writer_lastpos = original_writer->pos;
 
   // Insert REFLEX Tag
 
@@ -1333,9 +1334,23 @@ int  swf_WriteSWF2(writer_t*writer, SWF * swf)     // Writes SWF to file, return
   }
   
   if(swf->fileVersion >= 9) {
+      TAG*tag = swf->firstTag;
+      U32 flags = 0x08; // | 128 = usenetwork, | 16 = hasmetadata | 8 = actionscript3
+      int has_version_8_action=0;
+      int has_version_9_action=0;
+      while(tag) {
+       /* FIXME: this doesn't find actionscript in buttons */
+       if(tag->id == ST_DOACTION || tag->id == ST_DOINITACTION) 
+         has_version_8_action=1;
+       if(tag->id == ST_DOABC) 
+         has_version_9_action=1;
+       tag = tag->next;
+      }
+      if(has_version_8_action && !has_version_9_action)
+       flags = 0x00;
+
       if (swf->firstTag && swf->firstTag->id != ST_FILEATTRIBUTES)
       {
-         U32 flags = 0x8; // | 128 = usenetwork, | 16 = Actionscript3 | 8 = hasmetadata
          swf_SetU32(swf_InsertTagBefore(swf, swf->firstTag,ST_FILEATTRIBUTES),flags);
       }
   }
@@ -1435,7 +1450,7 @@ int  swf_WriteSWF2(writer_t*writer, SWF * swf)     // Writes SWF to file, return
     if(swf->compressed==1 || (swf->compressed==0 && swf->fileVersion>=6) || swf->compressed==8) {
       if(swf->compressed != 8) {
        zwriter.finish(&zwriter);
-       return writer->pos - writer_lastpos;
+       return original_writer->pos - writer_lastpos;
       }
       return (int)fileSize;
     } else {