mkvmuxer: Disallow AddTrack() after Tracks element is output.

BUG=https://code.google.com/p/webm/issues/detail?id=1083

Change-Id: I6a603337ba5fea1333f3f1c2595f9b87b148c427
This commit is contained in:
Tom Finegan 2015-10-21 09:07:00 -07:00
parent 1ad314e297
commit 01fdee435c
2 changed files with 9 additions and 2 deletions

View File

@ -1047,7 +1047,10 @@ const char Tracks::kVp8CodecId[] = "V_VP8";
const char Tracks::kVp9CodecId[] = "V_VP9";
const char Tracks::kVp10CodecId[] = "V_VP10";
Tracks::Tracks() : track_entries_(NULL), track_entries_size_(0) {}
Tracks::Tracks()
: track_entries_(NULL),
track_entries_size_(0),
wrote_tracks_(false) {}
Tracks::~Tracks() {
if (track_entries_) {
@ -1060,7 +1063,7 @@ Tracks::~Tracks() {
}
bool Tracks::AddTrack(Track* track, int32 number) {
if (number < 0)
if (number < 0 || wrote_tracks_)
return false;
// This muxer only supports track numbers in the range [1, 126], in
@ -1186,6 +1189,7 @@ bool Tracks::Write(IMkvWriter* writer) const {
stop_position - payload_position != static_cast<int64>(size))
return false;
wrote_tracks_ = true;
return true;
}

View File

@ -569,6 +569,9 @@ class Tracks {
// Number of Track elements added.
uint32 track_entries_size_;
// Whether or not Tracks element has already been written via IMkvWriter.
mutable bool wrote_tracks_;
LIBWEBM_DISALLOW_COPY_AND_ASSIGN(Tracks);
};