[vlc-commits] packetizer: h264: fix read check on total avcc size computation

Francois Cartegnie git at videolan.org
Wed Mar 29 10:41:13 CEST 2017


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Tue Mar 28 16:16:32 2017 +0200| [704a10e1d1209fdb78b463c9faf602fcc7ebadf1] | committer: Francois Cartegnie

packetizer: h264: fix read check on total avcc size computation

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=704a10e1d1209fdb78b463c9faf602fcc7ebadf1
---

 modules/packetizer/dts.c      |  4 ++--
 modules/packetizer/h264_nal.c | 12 +++++++++---
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/modules/packetizer/dts.c b/modules/packetizer/dts.c
index 5e8de67..cb2a4b9 100644
--- a/modules/packetizer/dts.c
+++ b/modules/packetizer/dts.c
@@ -216,9 +216,9 @@ static block_t *PacketizeBlock( decoder_t *p_dec, block_t **pp_block )
                     return NULL;
                 break;
             }
+            /* Even frame size is likely incorrect FSIZE #18166.
+             * Sync minus one byte, we can always sync 1 byte further */
             p_sys->i_input_size = p_sys->i_next_offset
-                                /* Even frame size is likely incorrect FSIZE.
-                                 * Sync minus one byte, we can always sync 1 byte further */
                                 = (p_sys->dts.i_frame_size % 2) ? p_sys->dts.i_frame_size - 1
                                                                 : p_sys->dts.i_frame_size;
             p_sys->i_state = STATE_NEXT_SYNC;
diff --git a/modules/packetizer/h264_nal.c b/modules/packetizer/h264_nal.c
index 82f3024..db494bf 100644
--- a/modules/packetizer/h264_nal.c
+++ b/modules/packetizer/h264_nal.c
@@ -101,12 +101,12 @@ static size_t get_avcC_to_AnnexB_NAL_size( const uint8_t *p_buf, size_t i_buf )
 {
     size_t i_total = 0;
 
-    p_buf += 5;
-    i_buf -= 5;
-
     if( i_buf < H264_MIN_AVCC_SIZE )
         return 0;
 
+    p_buf += 5;
+    i_buf -= 5;
+
     for ( unsigned int j = 0; j < 2; j++ )
     {
         /* First time is SPS, Second is PPS */
@@ -115,6 +115,9 @@ static size_t get_avcC_to_AnnexB_NAL_size( const uint8_t *p_buf, size_t i_buf )
 
         for ( unsigned int i = 0; i < i_loop_end; i++ )
         {
+            if( i_buf < 2 )
+                return 0;
+
             uint16_t i_nal_size = (p_buf[0] << 8) | p_buf[1];
             if(i_nal_size > i_buf - 2)
                 return 0;
@@ -122,6 +125,9 @@ static size_t get_avcC_to_AnnexB_NAL_size( const uint8_t *p_buf, size_t i_buf )
             p_buf += i_nal_size + 2;
             i_buf -= i_nal_size + 2;
         }
+
+        if( j == 0 && i_buf < 1 )
+            return 0;
     }
     return i_total;
 }



More information about the vlc-commits mailing list