[theora-dev] AMD64 bug

Peter De Wachter pdewacht at vub.ac.be
Thu Aug 24 14:10:20 PDT 2006


The theora_unpack_comment casts a pointer-to-int to pointer-to-long. This
is incorrect on AMD64, where ints and longs are of different size. On my
system (Debian unstable, gcc 4.1) this causes players to crash when they
reach the end of a movie. The patch below fixes this bug.


--- libtheora-0.0.0.alpha7/lib/toplevel.c	2006-06-13 00:57:36.000000000 +0200
+++ libtheora-pdw/lib/toplevel.c	2006-08-19 16:55:30.000000000 +0200
@@ -172,7 +172,7 @@
 
 static int _theora_unpack_comment(theora_comment *tc, oggpack_buffer *opb){
   int i;
-  long len;
+  long len,tmp;
 
    _tp_readlsbint(opb,&len);
   if(len<0)return(OC_BADHEADER);
@@ -180,7 +180,8 @@
   _tp_readbuffer(opb,tc->vendor, len);
   tc->vendor[len]='\0';
 
-  _tp_readlsbint(opb,(long *) &tc->comments);
+  _tp_readlsbint(opb,&tmp);
+  tc->comments=tmp;
   if(tc->comments<0)goto parse_err;
   tc->user_comments=_ogg_calloc(tc->comments,sizeof(*tc->user_comments));
   tc->comment_lengths=_ogg_calloc(tc->comments,sizeof(*tc->comment_lengths));


More information about the theora-dev mailing list