[vlc-devel] [PATCH 07/48] Always append a null character when reading HLS playlist
Jean-Paul Saman
jpsaman at videolan.org
Tue Jan 10 12:18:12 CET 2012
AFAICR this patch was already applied on vlc 1.2.0-xxxx branch.
Kind regards,
Jean-Paul Saman.
On Mon, Jan 9, 2012 at 4:16 PM, Hugo Beauzée-Luyssen <beauze.h at gmail.com> wrote:
> From: Luc Saillard <luc.saillard at sfr.com>
>
> The httplive module doesn't always append a null character after reading the
> playlist. Many str* function is used on the playlist buffer (strstr, printf,
> ...). We must ensure that the buffer is null terminated, else we will read
> random data.
>
> We also have two functions readM3u8() and read_M3u8() that does the same
> job. Rewrite it into read_M3U8_from_url() and read_M3U8_from_stream().
>
> Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
>
> Conflicts:
>
> modules/stream_filter/httplive.c
> ---
> modules/stream_filter/httplive.c | 19 +++++++------------
> 1 files changed, 7 insertions(+), 12 deletions(-)
>
> diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
> index 1282618..35d5da2 100644
> --- a/modules/stream_filter/httplive.c
> +++ b/modules/stream_filter/httplive.c
> @@ -43,6 +43,7 @@
> #include <vlc_url.h>
> #include <vlc_memory.h>
> #include <vlc_gcrypt.h>
> +#include <vlc_memory.h>
>
> /*****************************************************************************
> * Module descriptor
> @@ -151,8 +152,8 @@ static int Read (stream_t *, void *p_read, unsigned int i_read);
> static int Peek (stream_t *, const uint8_t **pp_peek, unsigned int i_peek);
> static int Control(stream_t *, int i_query, va_list);
>
> -static ssize_t read_M3U8(stream_t *s, const char *psz_url, uint8_t **buffer);
> -static ssize_t ReadM3U8(stream_t *s, uint8_t **buffer);
> +static ssize_t read_M3U8_from_stream(stream_t *s, uint8_t **buffer);
> +static ssize_t read_M3U8_from_url(stream_t *s, const char *url, uint8_t **buffer);
> static char *ReadLine(uint8_t *buffer, uint8_t **pos, size_t len);
>
> static int hls_Download(stream_t *s, segment_t *segment);
> @@ -997,7 +998,7 @@ static int parse_M3U8(stream_t *s, vlc_array_t *streams, uint8_t *buffer, const
>
> /* Download playlist file from server */
> uint8_t *buf = NULL;
> - ssize_t len = read_M3U8(s, hls->url, &buf);
> + ssize_t len = read_M3U8_from_url(s, hls->uri, &buf);
> if (len < 0)
> err = VLC_EGENERIC;
> else
> @@ -1272,7 +1273,7 @@ static int get_HTTPLiveMetaPlaylist(stream_t *s, vlc_array_t **streams)
>
> /* Download new playlist file from server */
> uint8_t *buffer = NULL;
> - ssize_t len = read_M3U8(s, p_sys->m3u8_playlist, &buffer);
> + ssize_t len = read_M3U8_from_url(s, p_sys->m3u8_playlist, &buffer);
> if (len < 0)
> return VLC_EGENERIC;
>
> @@ -1819,17 +1820,11 @@ static ssize_t read_M3U8_from_stream(stream_t *s, uint8_t **buffer)
> return total_bytes;
> }
>
> -static ssize_t read_M3U8_from_url(stream_t *s, vlc_url_t *url, uint8_t **buffer)
> +static ssize_t read_M3U8_from_url(stream_t *s, const char *url, uint8_t **buffer)
> {
> assert(*buffer == NULL);
>
> - /* Construct URL */
> - char *psz_url = ConstructUrl(url);
> - if (psz_url == NULL)
> - return VLC_ENOMEM;
> -
> - stream_t *p_m3u8 = stream_UrlNew(s, psz_url);
> - free(psz_url);
> + stream_t *p_m3u8 = stream_UrlNew(s, url);
> if (p_m3u8 == NULL)
> return VLC_EGENERIC;
>
> --
> 1.7.8.3
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> http://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list