Sophie

Sophie

distrib > Mageia > 5 > i586 > by-pkgid > 5aa02d1f6f808baa94bd6461dad2a2e3 > files > 1

mad-0.15.1b-16.1.mga5.src.rpm

--- libmad/bit.c.orig	2016-05-24 17:15:59.774492679 +0200
+++ libmad/bit.c	2016-05-24 17:31:11.453880933 +0200
@@ -85,11 +85,12 @@
  * NAME:	bit->init()
  * DESCRIPTION:	initialize bit pointer struct
  */
-void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte)
+void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte, unsigned int length)
 {
   bitptr->byte  = byte;
   bitptr->cache = 0;
   bitptr->left  = CHAR_BIT;
+  bitptr->length = length;
 }
 
 /*
@@ -109,7 +110,11 @@
  */
 unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *bitptr)
 {
-  return bitptr->left == CHAR_BIT ? bitptr->byte : bitptr->byte + 1;
+    if (bitptr->left == CHAR_BIT)
+        return bitptr->byte;
+    if (bitptr->length == 0)
+        return 0;
+    return bitptr->byte + 1;
 }
 
 /*
@@ -118,11 +123,17 @@
  */
 void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len)
 {
+  if (bitptr->length < len / CHAR_BIT)
+    return;
   bitptr->byte += len / CHAR_BIT;
   bitptr->left -= len % CHAR_BIT;
+  bitptr->length -= len / CHAR_BIT;
 
   if (bitptr->left > CHAR_BIT) {
+    if (bitptr->length == 0)
+      return;
     bitptr->byte++;
+    bitptr->length--;
     bitptr->left += CHAR_BIT;
   }
 
@@ -154,17 +165,21 @@
   value = bitptr->cache & ((1 << bitptr->left) - 1);
   len  -= bitptr->left;
 
+  if (bitptr->length == 0)
+    return value;
   bitptr->byte++;
+  bitptr->length--;
   bitptr->left = CHAR_BIT;
 
   /* more bytes */
 
-  while (len >= CHAR_BIT) {
+  while (len >= CHAR_BIT && bitptr->length > 0) {
     value = (value << CHAR_BIT) | *bitptr->byte++;
+    bitptr->length--;
     len  -= CHAR_BIT;
   }
 
-  if (len > 0) {
+  if (len > 0 && bitptr->length > 0) {
     bitptr->cache = *bitptr->byte;
 
     value = (value << len) | (bitptr->cache >> (CHAR_BIT - len));
--- libmad/frame.c.orig	2016-05-24 17:33:50.469874358 +0200
+++ libmad/frame.c	2016-05-24 17:40:37.345904926 +0200
@@ -348,7 +348,7 @@
     }
   }
   else {
-    mad_bit_init(&stream->ptr, ptr);
+    mad_bit_init(&stream->ptr, ptr, stream->bufend - ptr);
 
     if (mad_stream_sync(stream) == -1) {
       if (end - stream->next_frame >= MAD_BUFFER_GUARD)
@@ -365,7 +365,7 @@
   stream->this_frame = ptr;
   stream->next_frame = ptr + 1;  /* possibly bogus sync word */
 
-  mad_bit_init(&stream->ptr, stream->this_frame);
+  mad_bit_init(&stream->ptr, stream->this_frame, stream->bufend - stream->this_frame);
 
   if (decode_header(header, stream) == -1)
     goto fail;
@@ -462,7 +462,7 @@
   if (frame->header.layer != MAD_LAYER_III) {
     struct mad_bitptr next_frame;
 
-    mad_bit_init(&next_frame, stream->next_frame);
+    mad_bit_init(&next_frame, stream->next_frame, stream->bufend - stream->next_frame);
 
     stream->anc_ptr    = stream->ptr;
     stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);
--- libmad/stream.c.orig	2016-05-24 17:31:32.237879250 +0200
+++ libmad/stream.c	2016-05-24 17:33:35.541874407 +0200
@@ -45,9 +45,9 @@
 
   stream->this_frame = 0;
   stream->next_frame = 0;
-  mad_bit_init(&stream->ptr, 0);
+  mad_bit_init(&stream->ptr, 0, 0);
 
-  mad_bit_init(&stream->anc_ptr, 0);
+  mad_bit_init(&stream->anc_ptr, 0, 0);
   stream->anc_bitlen = 0;
 
   stream->main_data  = 0;
@@ -87,7 +87,7 @@
 
   stream->sync = 1;
 
-  mad_bit_init(&stream->ptr, buffer);
+  mad_bit_init(&stream->ptr, buffer, length);
 }
 
 /*
@@ -117,7 +117,7 @@
   if (end - ptr < MAD_BUFFER_GUARD)
     return -1;
 
-  mad_bit_init(&stream->ptr, ptr);
+  mad_bit_init(&stream->ptr, ptr, stream->bufend - stream->buffer);
 
   return 0;
 }
--- libmad/bit.h.orig	2016-05-24 17:16:15.634465975 +0200
+++ libmad/bit.h	2016-05-24 17:17:29.030354093 +0200
@@ -26,9 +26,10 @@
   unsigned char const *byte;
   unsigned short cache;
   unsigned short left;
+  unsigned int length;
 };
 
-void mad_bit_init(struct mad_bitptr *, unsigned char const *);
+void mad_bit_init(struct mad_bitptr *, unsigned char const *, unsigned int length);
 
 # define mad_bit_finish(bitptr)		/* nothing */
 
--- libmad/layer3.c.orig	2016-05-24 17:39:34.709897058 +0200
+++ libmad/layer3.c	2016-05-24 17:53:32.125728363 +0200
@@ -2586,7 +2586,7 @@
     struct mad_bitptr peek;
     unsigned long header;
 
-    mad_bit_init(&peek, stream->next_frame);
+    mad_bit_init(&peek, stream->next_frame, stream->bufend - stream->next_frame);
 
     header = mad_bit_read(&peek, 32);
     if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
@@ -2626,7 +2626,7 @@
     }
     else {
       mad_bit_init(&ptr,
-		   *stream->main_data + stream->md_len - si.main_data_begin);
+           *stream->main_data + stream->md_len - si.main_data_begin, md_len);
 
       if (md_len > si.main_data_begin) {
 	assert(stream->md_len + md_len -