You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
* Bad buffer management bug. Forgot to take care of the case
where doubling the size of the buffer is not enough. Originally committed as revision 633 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
10
ffserver.c
10
ffserver.c
@@ -1317,13 +1317,21 @@ static void http_write_packet(void *opaque,
|
|||||||
c->buffer_ptr = c->buffer_end = c->buffer;
|
c->buffer_ptr = c->buffer_end = c->buffer;
|
||||||
|
|
||||||
if (c->buffer_end - c->buffer + size > c->buffer_size) {
|
if (c->buffer_end - c->buffer + size > c->buffer_size) {
|
||||||
UINT8 *new_buffer = av_malloc(c->buffer_size * 2);
|
int new_buffer_size = c->buffer_size * 2;
|
||||||
|
UINT8 *new_buffer;
|
||||||
|
|
||||||
|
if (new_buffer_size <= c->buffer_end - c->buffer + size) {
|
||||||
|
new_buffer_size = c->buffer_end - c->buffer + size + c->buffer_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
new_buffer = av_malloc(new_buffer_size);
|
||||||
if (new_buffer) {
|
if (new_buffer) {
|
||||||
memcpy(new_buffer, c->buffer, c->buffer_end - c->buffer);
|
memcpy(new_buffer, c->buffer, c->buffer_end - c->buffer);
|
||||||
c->buffer_end += (new_buffer - c->buffer);
|
c->buffer_end += (new_buffer - c->buffer);
|
||||||
c->buffer_ptr += (new_buffer - c->buffer);
|
c->buffer_ptr += (new_buffer - c->buffer);
|
||||||
av_free(c->buffer);
|
av_free(c->buffer);
|
||||||
c->buffer = new_buffer;
|
c->buffer = new_buffer;
|
||||||
|
c->buffer_size = new_buffer_size;
|
||||||
} else {
|
} else {
|
||||||
av_abort();
|
av_abort();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user