Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
0c46e958
Commit
0c46e958
authored
Oct 08, 2011
by
Alex Converse
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mxfdec: Fix some buffer overreads caused by the misuse of AVPacket related functions.
parent
11a32d53
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
8 deletions
+16
-8
mxfdec.c
libavformat/mxfdec.c
+16
-8
No files found.
libavformat/mxfdec.c
View file @
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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment