mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-30 19:34:43 +00:00
rtmpproto: Move the flv header/trailer addition to append_flv_data
update_offset is also called from handle_metadata, where the
packet header sizes is already included in the size.
Previously this lead to flv_data/flv_size including 15 uninitialized
bytes at the end after each call to handle_metadata, making the
flv demuxer lose sync with the stream.
Also remove leftover copying in handle_metadata. This is a leftover
from the refactoring in 5840473
. (Previously this final mempcy was
the one that copied all the packets at once, while this is done
within the loop right now.) After making sure flv_size is set to
the right size, this write was out of bounds.
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
72540e514c
commit
24fee95321
@ -2077,11 +2077,11 @@ static int update_offset(RTMPContext *rt, int size)
|
||||
if (rt->flv_off < rt->flv_size) {
|
||||
// There is old unread data in the buffer, thus append at the end
|
||||
old_flv_size = rt->flv_size;
|
||||
rt->flv_size += size + 15;
|
||||
rt->flv_size += size;
|
||||
} else {
|
||||
// All data has been read, write the new data at the start of the buffer
|
||||
old_flv_size = 0;
|
||||
rt->flv_size = size + 15;
|
||||
rt->flv_size = size;
|
||||
rt->flv_off = 0;
|
||||
}
|
||||
|
||||
@ -2096,7 +2096,7 @@ static int append_flv_data(RTMPContext *rt, RTMPPacket *pkt, int skip)
|
||||
const int size = pkt->size - skip;
|
||||
uint32_t ts = pkt->timestamp;
|
||||
|
||||
old_flv_size = update_offset(rt, size);
|
||||
old_flv_size = update_offset(rt, size + 15);
|
||||
|
||||
if ((ret = av_reallocp(&rt->flv_data, rt->flv_size)) < 0) {
|
||||
rt->flv_size = rt->flv_off = 0;
|
||||
@ -2229,7 +2229,6 @@ static int handle_metadata(RTMPContext *rt, RTMPPacket *pkt)
|
||||
next += size + 3 + 4;
|
||||
p += size + 3 + 4;
|
||||
}
|
||||
memcpy(p, next, RTMP_HEADER);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user