handle undefined ID exception
[swftools.git] / lib / python / tag.c
index a0139f6..23cf8f9 100644 (file)
@@ -136,15 +136,29 @@ PyObject* tag_new()
     tag->tagmap = tagmap_new();
     return (PyObject*)tag;
 }
-PyObject* tag_new2(TAG*_tag)
+PyObject* tag_new2(TAG*t, PyObject* tagmap)
 {
     TagObject*tag = PyObject_New(TagObject, &TagClass);
-    mylog("+%08x(%d) tag_new\n", (int)tag, tag->ob_refcnt);
+    mylog("+%08x(%d) tag_new tag=%08x\n", (int)tag, tag->ob_refcnt, t);
     tag->font = 0;
     tag->character = 0;
     tag->placeobject = 0;
-    tag->tag = _tag;
+    tag->tag = t;
     tag->tagmap = tagmap_new();
+    
+    int num = swf_GetNumUsedIDs(t);
+    int * positions = malloc(num*sizeof(int));
+    swf_GetUsedIDs(t, positions);
+    int i;
+    for(i=0;i<num;i++) {
+       int id = GET16(&t->data[positions[i]]);
+       PyObject*obj = tagmap_id2obj(tagmap, id);
+       if(obj==NULL) {
+           PyErr_SetString(PyExc_Exception, setError("TagID %d not defined", id));
+           return NULL;
+       }
+       tagmap_addMapping(tag->tagmap, id, obj);
+    }
     return (PyObject*)tag;
 }
 
@@ -320,9 +334,9 @@ TAG* tag_getRAWTAG(PyObject*self)
 /* serialize */
 TAG* tag_getTAG(PyObject*self, TAG*prevTag, PyObject*tagmap)
 {
-    mylog(" %08x(%d) tag_getTAG tagmap=%08x \n", (int)self, self->ob_refcnt, tagmap);
     TagObject*tag = (TagObject*)self;
     TAG* t = tag_getRAWTAG(self);
+    mylog(" %08x(%d) tag_getTAG tagmap=%08x tag=%08x\n", (int)self, self->ob_refcnt, tagmap, t);
     t->next = 0;
     t->prev = prevTag;
     if(prevTag)