summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJulian Scheel <julian@jusst.de>2008-12-13 12:24:38 +0000
committerJulian Scheel <julian@jusst.de>2008-12-13 12:24:38 +0000
commitb5c69144556a437103ef363ebb398864e86dd3a0 (patch)
treece6aa6aba11e891fe9ed16e668d4051a1f168690 /src
parentf568815dd336855ddb9f5a8d84cee981197304f9 (diff)
downloadxine-lib-b5c69144556a437103ef363ebb398864e86dd3a0.tar.gz
xine-lib-b5c69144556a437103ef363ebb398864e86dd3a0.tar.bz2
Fix possible segfault on buffer underrun.
Diffstat (limited to 'src')
-rw-r--r--src/libvdpau/h264_parser.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libvdpau/h264_parser.c b/src/libvdpau/h264_parser.c
index 65ca7c85b..f3ee412d7 100644
--- a/src/libvdpau/h264_parser.c
+++ b/src/libvdpau/h264_parser.c
@@ -1031,6 +1031,14 @@ int parse_frame(struct nal_parser *parser, uint8_t *inbuf, int inbuf_len,
}
if (parser->last_nal_res != 2) {
+ if (parser->buf_len + parser->prebuf_len > MAX_FRAME_SIZE) {
+ printf("buf underrun!!\n");
+ parser->buf_len = 0;
+ *ret_len = 0;
+ *ret_buf = NULL;
+ return parsed_len;
+ }
+
/* this is a SLICE, keep it in the buffer */
xine_fast_memcpy(parser->buf + parser->buf_len, prebuf, parser->prebuf_len);
parser->buf_len += parser->prebuf_len;