| 
																	
																	
																		
																	
																	
																 | 
																@@ -110,24 +110,38 @@ int av_grow_packet(AVPacket *pkt, int grow_by) | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																    int new_size; | 
																 | 
																 | 
																    int new_size; | 
															
														
														
													
														
															
																 | 
																 | 
																    av_assert0((unsigned)pkt->size <= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE); | 
																 | 
																 | 
																    av_assert0((unsigned)pkt->size <= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE); | 
															
														
														
													
														
															
																 | 
																 | 
																    if (!pkt->size) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        return av_new_packet(pkt, grow_by); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    if ((unsigned)grow_by > | 
																 | 
																 | 
																    if ((unsigned)grow_by > | 
															
														
														
													
														
															
																 | 
																 | 
																        INT_MAX - (pkt->size + AV_INPUT_BUFFER_PADDING_SIZE)) | 
																 | 
																 | 
																        INT_MAX - (pkt->size + AV_INPUT_BUFFER_PADDING_SIZE)) | 
															
														
														
													
														
															
																 | 
																 | 
																        return -1; | 
																 | 
																 | 
																        return -1; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    new_size = pkt->size + grow_by + AV_INPUT_BUFFER_PADDING_SIZE; | 
																 | 
																 | 
																    new_size = pkt->size + grow_by + AV_INPUT_BUFFER_PADDING_SIZE; | 
															
														
														
													
														
															
																 | 
																 | 
																    if (pkt->buf) { | 
																 | 
																 | 
																    if (pkt->buf) { | 
															
														
														
													
														
															
																 | 
																 | 
																        int ret = av_buffer_realloc(&pkt->buf, new_size); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        if (ret < 0) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																            return ret; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        size_t data_offset; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        uint8_t *old_data = pkt->data; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        if (pkt->data == NULL) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            data_offset = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            pkt->data = pkt->buf->data; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        } else { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            data_offset = pkt->data - pkt->buf->data; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (data_offset > INT_MAX - new_size) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return -1; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        if (new_size + data_offset > pkt->buf->size) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            int ret = av_buffer_realloc(&pkt->buf, new_size + data_offset); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (ret < 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                pkt->data = old_data; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return ret; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            pkt->data = pkt->buf->data + data_offset; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																    } else { | 
																 | 
																 | 
																    } else { | 
															
														
														
													
														
															
																 | 
																 | 
																        pkt->buf = av_buffer_alloc(new_size); | 
																 | 
																 | 
																        pkt->buf = av_buffer_alloc(new_size); | 
															
														
														
													
														
															
																 | 
																 | 
																        if (!pkt->buf) | 
																 | 
																 | 
																        if (!pkt->buf) | 
															
														
														
													
														
															
																 | 
																 | 
																            return AVERROR(ENOMEM); | 
																 | 
																 | 
																            return AVERROR(ENOMEM); | 
															
														
														
													
														
															
																 | 
																 | 
																        memcpy(pkt->buf->data, pkt->data, FFMIN(pkt->size, pkt->size + grow_by)); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        memcpy(pkt->buf->data, pkt->data, pkt->size); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        pkt->data = pkt->buf->data; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																    pkt->data  = pkt->buf->data; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    pkt->size += grow_by; | 
																 | 
																 | 
																    pkt->size += grow_by; | 
															
														
														
													
														
															
																 | 
																 | 
																    memset(pkt->data + pkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); | 
																 | 
																 | 
																    memset(pkt->data + pkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |