From d93e465f2b114335bc423f44b7c588b2dbd8add9 Mon Sep 17 00:00:00 2001 From: meh Date: Sun, 27 Sep 2015 04:47:00 +0200 Subject: [PATCH] codec/packet: avoid segfault with empty packet writing --- src/codec/packet/mod.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/codec/packet/mod.rs b/src/codec/packet/mod.rs index 6b539fb..6c8f7b5 100644 --- a/src/codec/packet/mod.rs +++ b/src/codec/packet/mod.rs @@ -24,6 +24,10 @@ impl Packet { pub unsafe fn as_mut_ptr(&mut self) -> *mut AVPacket { &mut self.0 } + + pub unsafe fn is_empty(&self) -> bool { + self.0.buf.is_null() + } } impl Packet { @@ -172,6 +176,10 @@ impl Packet { pub fn write(&self, format: &mut format::context::Output) -> Result { unsafe { + if self.is_empty() { + return Err(Error::InvalidData); + } + match av_write_frame(format.as_mut_ptr(), self.as_ptr()) { 1 => Ok(true), 0 => Ok(false), @@ -182,6 +190,10 @@ impl Packet { pub fn write_interleaved(&self, format: &mut format::context::Output) -> Result { unsafe { + if self.is_empty() { + return Err(Error::InvalidData); + } + match av_interleaved_write_frame(format.as_mut_ptr(), self.as_ptr()) { 1 => Ok(true), 0 => Ok(false),