[FFmpeg-devel,v3,2/2] avcodec/bsf: Forbid packet without payload in av_bsf_send_packet

Message ID 1469529608-1845-2-git-send-email-sebechlebskyjan@gmail.com
State Accepted
Commit bfdca87ab55c7f69087d962dc47aa45c8c6436fb
Headers show

Commit Message

sebechlebskyjan@gmail.com July 26, 2016, 10:40 a.m. UTC
From: Jan Sebechlebsky <sebechlebskyjan@gmail.com>

Signed-off-by: Jan Sebechlebsky <sebechlebskyjan@gmail.com>
---
 libavcodec/avcodec.h | 3 ++-
 libavcodec/bsf.c     | 3 +++
 2 files changed, 5 insertions(+), 1 deletion(-)

Comments

Michael Niedermayer Aug. 13, 2016, 9:03 a.m. UTC | #1
On Tue, Jul 26, 2016 at 12:40:08PM +0200, sebechlebskyjan@gmail.com wrote:
> From: Jan Sebechlebsky <sebechlebskyjan@gmail.com>
> 
> Signed-off-by: Jan Sebechlebsky <sebechlebskyjan@gmail.com>
> ---
>  libavcodec/avcodec.h | 3 ++-
>  libavcodec/bsf.c     | 3 +++
>  2 files changed, 5 insertions(+), 1 deletion(-)

applied

thanks

[...]

Patch

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index ca8dba8..36f7935 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -5898,7 +5898,8 @@  int av_bsf_init(AVBSFContext *ctx);
  * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or
  * AVERROR_EOF.
  *
- * @param pkt the packet to filter. The bitstream filter will take ownership of
+ * @param pkt the packet to filter. pkt must contain some payload (i.e data or
+ * side data must be present in pkt). The bitstream filter will take ownership of
  * the packet and reset the contents of pkt. pkt is not touched if an error occurs.
  * This parameter may be NULL, which signals the end of the stream (i.e. no more
  * packets will be sent). That will cause the filter to output any packets it
diff --git a/libavcodec/bsf.c b/libavcodec/bsf.c
index 9b9ada7..8e36861 100644
--- a/libavcodec/bsf.c
+++ b/libavcodec/bsf.c
@@ -21,6 +21,7 @@ 
 #include "libavutil/log.h"
 #include "libavutil/mem.h"
 #include "libavutil/opt.h"
+#include "libavutil/avassert.h"
 
 #include "avcodec.h"
 #include "bsf.h"
@@ -177,6 +178,8 @@  int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
         return 0;
     }
 
+    av_assert0(pkt->data || pkt->side_data);
+
     if (ctx->internal->eof) {
         av_log(ctx, AV_LOG_ERROR, "A non-NULL packet sent after an EOF.\n");
         return AVERROR(EINVAL);