| 799 | } DynBuffer; |
| 800 | |
| 801 | static int dyn_buf_write(void *opaque, uint8_t *buf, int buf_size) |
| 802 | { |
| 803 | DynBuffer *d = opaque; |
| 804 | unsigned new_size, new_allocated_size; |
| 805 | |
| 806 | /* reallocate buffer if needed */ |
| 807 | new_size = d->pos + buf_size; |
| 808 | new_allocated_size = d->allocated_size; |
| 809 | if(new_size < d->pos || new_size > INT_MAX/2) |
| 810 | return -1; |
| 811 | while (new_size > new_allocated_size) { |
| 812 | if (!new_allocated_size) |
| 813 | new_allocated_size = new_size; |
| 814 | else |
| 815 | new_allocated_size += new_allocated_size / 2 + 1; |
| 816 | } |
| 817 | |
| 818 | if (new_allocated_size > d->allocated_size) { |
| 819 | d->buffer = av_realloc(d->buffer, new_allocated_size); |
| 820 | if(d->buffer == NULL) |
| 821 | return AVERROR(ENOMEM); |
| 822 | d->allocated_size = new_allocated_size; |
| 823 | } |
| 824 | memcpy(d->buffer + d->pos, buf, buf_size); |
| 825 | d->pos = new_size; |
| 826 | if (d->pos > d->size) |
| 827 | d->size = d->pos; |
| 828 | return buf_size; |
| 829 | } |
| 830 | |
| 831 | static int dyn_packet_buf_write(void *opaque, uint8_t *buf, int buf_size) |
| 832 | { |
no test coverage detected