Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
0c46e958
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0c46e958
编写于
10月 07, 2011
作者:
A
Alex Converse
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mxfdec: Fix some buffer overreads caused by the misuse of AVPacket related functions.
上级
11a32d53
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
8 deletion
+16
-8
libavformat/mxfdec.c
libavformat/mxfdec.c
+16
-8
未找到文件。
libavformat/mxfdec.c
浏览文件 @
0c46e958
...
...
@@ -224,12 +224,13 @@ static int mxf_get_d10_aes3_packet(AVIOContext *pb, AVStream *st, AVPacket *pkt,
if
(
length
>
61444
)
/* worst case PAL 1920 samples 8 channels */
return
-
1
;
av_new_packet
(
pkt
,
length
);
avio_read
(
pb
,
pkt
->
data
,
length
);
length
=
av_get_packet
(
pb
,
pkt
,
length
);
if
(
length
<
0
)
return
length
;
data_ptr
=
pkt
->
data
;
end_ptr
=
pkt
->
data
+
length
;
buf_ptr
=
pkt
->
data
+
4
;
/* skip SMPTE 331M header */
for
(;
buf_ptr
<
end_ptr
;
)
{
for
(;
buf_ptr
+
st
->
codec
->
channels
*
4
<
end_ptr
;
)
{
for
(
i
=
0
;
i
<
st
->
codec
->
channels
;
i
++
)
{
uint32_t
sample
=
bytestream_get_le32
(
&
buf_ptr
);
if
(
st
->
codec
->
bits_per_coded_sample
==
24
)
...
...
@@ -239,7 +240,7 @@ static int mxf_get_d10_aes3_packet(AVIOContext *pb, AVStream *st, AVPacket *pkt,
}
buf_ptr
+=
32
-
st
->
codec
->
channels
*
4
;
// always 8 channels stored SMPTE 331M
}
pkt
->
size
=
data_ptr
-
pkt
->
data
;
av_shrink_packet
(
pkt
,
data_ptr
-
pkt
->
data
)
;
return
0
;
}
...
...
@@ -291,12 +292,16 @@ static int mxf_decrypt_triplet(AVFormatContext *s, AVPacket *pkt, KLVPacket *klv
if
(
memcmp
(
tmpbuf
,
checkv
,
16
))
av_log
(
s
,
AV_LOG_ERROR
,
"probably incorrect decryption key
\n
"
);
size
-=
32
;
av_get_packet
(
pb
,
pkt
,
size
);
size
=
av_get_packet
(
pb
,
pkt
,
size
);
if
(
size
<
0
)
return
size
;
else
if
(
size
<
plaintext_size
)
return
AVERROR_INVALIDDATA
;
size
-=
plaintext_size
;
if
(
mxf
->
aesc
)
av_aes_crypt
(
mxf
->
aesc
,
&
pkt
->
data
[
plaintext_size
],
&
pkt
->
data
[
plaintext_size
],
size
>>
4
,
ivec
,
1
);
pkt
->
size
=
orig_size
;
av_shrink_packet
(
pkt
,
orig_size
)
;
pkt
->
stream_index
=
index
;
avio_skip
(
pb
,
end
-
avio_tell
(
pb
));
return
0
;
...
...
@@ -333,8 +338,11 @@ static int mxf_read_packet(AVFormatContext *s, AVPacket *pkt)
av_log
(
s
,
AV_LOG_ERROR
,
"error reading D-10 aes3 frame
\n
"
);
return
-
1
;
}
}
else
av_get_packet
(
s
->
pb
,
pkt
,
klv
.
length
);
}
else
{
int
ret
=
av_get_packet
(
s
->
pb
,
pkt
,
klv
.
length
);
if
(
ret
<
0
)
return
ret
;
}
pkt
->
stream_index
=
index
;
pkt
->
pos
=
klv
.
offset
;
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录