[vlc-commits] commit: Really fix ps_pkt_size() ( Rémi Denis-Courmont )

git at videolan.org git at videolan.org
Sun Oct 10 12:11:41 CEST 2010


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Oct 10 12:43:38 2010 +0300| [9dc746496551eb854ab6bf0ebdeb8c8ab5cd1709] | committer: Rémi Denis-Courmont 

Really fix ps_pkt_size()

The original commit description is rather terse
  "ps demux: fix an issue in ps_pkt_read()"
so I don't really know what the "issue" is. But ps_pkt_size() really
made no sense as is.

This reverts commit d761cf6f1d40a952548407b843ee0c3f0a3cd472.

Conflicts:

	modules/demux/ps.h

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

 modules/demux/ps.c |   15 ++++++---------
 modules/demux/ps.h |   11 ++++++-----
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/modules/demux/ps.c b/modules/demux/ps.c
index f21be2d..c05d49a 100644
--- a/modules/demux/ps.c
+++ b/modules/demux/ps.c
@@ -581,16 +581,12 @@ static int ps_pkt_resynch( stream_t *s, uint32_t *pi_code )
 static block_t *ps_pkt_read( stream_t *s, uint32_t i_code )
 {
     const uint8_t *p_peek;
-    int      i_peek = stream_Peek( s, &p_peek, 14 );
-    int      i_size;
-    VLC_UNUSED(i_code);
-
-    /* Smallest valid packet */
-    if( i_peek < 6 ) return NULL;
+    int i_peek = stream_Peek( s, &p_peek, 14 );
+    if( i_peek < 4 )
+        return NULL;
 
-    i_size = ps_pkt_size( p_peek, i_peek );
-
-    if( i_size < 0 || ( i_size <= 6 && p_peek[3] > 0xba ) )
+    int i_size = ps_pkt_size( p_peek, i_peek );
+    if( i_size <= 6 && p_peek[3] > 0xba )
     {
         /* Special case, search the next start code */
         i_size = 6;
@@ -618,5 +614,6 @@ static block_t *ps_pkt_read( stream_t *s, uint32_t i_code )
         return stream_Block( s, i_size );
     }
 
+    VLC_UNUSED(i_code);
     return NULL;
 }
diff --git a/modules/demux/ps.h b/modules/demux/ps.h
index c432faa..4d75b74 100644
--- a/modules/demux/ps.h
+++ b/modules/demux/ps.h
@@ -299,13 +299,14 @@ static inline int ps_pkt_id( block_t *p_pkt )
     return p_pkt->p_buffer[3];
 }
 
-/* return the size of the next packet
- * You need to give him at least 14 bytes (and it need to start as a
- * valid packet) It does not handle less than 6 bytes */
+/* return the size of the next packet */
 static inline int ps_pkt_size( const uint8_t *p, int i_peek )
 {
-    assert( i_peek >= 6 );
-    if( p[3] == 0xb9 && i_peek >= 4 )
+    if( unlikely(i_peek < 4) )
+    {
+        return -1;
+    }
+    else if( p[3] == 0xb9 )
     {
         return 4;
     }



More information about the vlc-commits mailing list