summaryrefslogtreecommitdiff
path: root/third_party/libwebm/mkvparser/mkvparser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebm/mkvparser/mkvparser.cc')
-rw-r--r--third_party/libwebm/mkvparser/mkvparser.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/third_party/libwebm/mkvparser/mkvparser.cc b/third_party/libwebm/mkvparser/mkvparser.cc
index 9c78ead2b..dcb969dcf 100644
--- a/third_party/libwebm/mkvparser/mkvparser.cc
+++ b/third_party/libwebm/mkvparser/mkvparser.cc
@@ -5311,7 +5311,7 @@ long VideoTrack::Parse(Segment* pSegment, const Info& info,
const long long stop = pos + s.size;
- Colour* colour = NULL;
+ std::unique_ptr<Colour> colour_ptr;
std::unique_ptr<Projection> projection_ptr;
while (pos < stop) {
@@ -5361,8 +5361,12 @@ long VideoTrack::Parse(Segment* pSegment, const Info& info,
if (rate <= 0)
return E_FILE_FORMAT_INVALID;
} else if (id == libwebm::kMkvColour) {
- if (!Colour::Parse(pReader, pos, size, &colour))
+ Colour* colour = NULL;
+ if (!Colour::Parse(pReader, pos, size, &colour)) {
return E_FILE_FORMAT_INVALID;
+ } else {
+ colour_ptr.reset(colour);
+ }
} else if (id == libwebm::kMkvProjection) {
Projection* projection = NULL;
if (!Projection::Parse(pReader, pos, size, &projection)) {
@@ -5404,7 +5408,7 @@ long VideoTrack::Parse(Segment* pSegment, const Info& info,
pTrack->m_display_unit = display_unit;
pTrack->m_stereo_mode = stereo_mode;
pTrack->m_rate = rate;
- pTrack->m_colour = colour;
+ pTrack->m_colour = colour_ptr.release();
pTrack->m_colour_space = colour_space;
pTrack->m_projection = projection_ptr.release();