made getstring respect the tag boundary
[swftools.git] / lib / rfxswf.c
index 29a13ea..ad3ad21 100644 (file)
@@ -83,7 +83,16 @@ void swf_SetTagPos(TAG * t,U32 pos)
 char* swf_GetString(TAG*t)
 {
     char* str = ((char*)(&(t)->data[(t)->pos]));
-    while(swf_GetU8(t));
+    while(t->pos < t->len && swf_GetU8(t));
+    /* make sure we always have a trailing zero byte */
+    if(t->pos == t->len) {
+      if(t->len == t->memsize) {
+       swf_ResetWriteBits(t);
+       swf_SetU8(t, 0);
+       t->len = t->pos;
+      }
+      t->data[t->len] = 0;
+    }
     return str;
 }
 
@@ -1236,6 +1245,15 @@ int  swf_WriteSWF2(writer_t*writer, SWF * swf)     // Writes SWF to file, return
 
   if(writer) writer_lastpos = writer->pos;
 
+  if(swf->fileVersion >= 8) {
+      if ((swf->firstTag && swf->firstTag->id != ST_FILEATTRIBUTES) &&
+         (!swf->firstTag->next || swf->firstTag->next->id != ST_FILEATTRIBUTES)) 
+      {
+         U32 flags = 0; // | 128 = usenetwork, | 8 = hasmetadata
+         swf_SetU32(swf_InsertTagBefore(swf, swf->firstTag,ST_FILEATTRIBUTES),flags);
+      }
+  }
+
   // Insert REFLEX Tag
 
 #ifdef INSERT_RFX_TAG