diff --git a/.gitattributes b/.gitattributes
index 6394064..2b5cda5 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2,3 +2,5 @@
 *.vcproj        eol=crlf
 *.vsprops       eol=crlf
 *.vcxproj       eol=crlf
+*.mkv           -text -diff
+*.webm          -text -diff
diff --git a/common/vp9_header_parser_tests.cc b/common/vp9_header_parser_tests.cc
index c4610b9..1e8eceb 100644
--- a/common/vp9_header_parser_tests.cc
+++ b/common/vp9_header_parser_tests.cc
@@ -59,7 +59,19 @@
     CreateAndLoadSegment(filename, 4);
   }
 
-  void ProcessTheFrames() {
+  // Load a corrupted segment with no expectation of correctness.
+  void CreateAndLoadInvalidSegment(const std::string& filename) {
+    filename_ = test::GetTestFilePath(filename);
+    ASSERT_EQ(0, reader_.Open(filename_.c_str()));
+    is_reader_open_ = true;
+    pos_ = 0;
+    mkvparser::EBMLHeader ebml_header;
+    ebml_header.Parse(&reader_, pos_);
+    ASSERT_EQ(0, mkvparser::Segment::CreateInstance(&reader_, pos_, segment_));
+    ASSERT_GE(0, segment_->Load());
+  }
+
+  void ProcessTheFrames(bool invalid_bitstream) {
     unsigned char* data = NULL;
     size_t data_len = 0;
     const mkvparser::Tracks* const parser_tracks = segment_->GetTracks();
@@ -96,7 +108,7 @@
             }
             ASSERT_FALSE(frame.Read(&reader_, data));
             parser_.SetFrame(data, data_len);
-            parser_.ParseUncompressedHeader();
+            ASSERT_EQ(parser_.ParseUncompressedHeader(), !invalid_bitstream);
           }
         }
 
@@ -119,8 +131,8 @@
 };
 
 TEST_F(Vp9HeaderParserTests, VideoOnlyFile) {
-  CreateAndLoadSegment("test_stereo_left_right.webm");
-  ProcessTheFrames();
+  ASSERT_NO_FATAL_FAILURE(CreateAndLoadSegment("test_stereo_left_right.webm"));
+  ProcessTheFrames(false);
   EXPECT_EQ(256, parser_.width());
   EXPECT_EQ(144, parser_.height());
   EXPECT_EQ(1, parser_.column_tiles());
@@ -128,14 +140,31 @@
 }
 
 TEST_F(Vp9HeaderParserTests, Muxed) {
-  CreateAndLoadSegment("bbb_480p_vp9_opus_1second.webm", 4);
-  ProcessTheFrames();
+  ASSERT_NO_FATAL_FAILURE(
+      CreateAndLoadSegment("bbb_480p_vp9_opus_1second.webm", 4));
+  ProcessTheFrames(false);
   EXPECT_EQ(854, parser_.width());
   EXPECT_EQ(480, parser_.height());
   EXPECT_EQ(2, parser_.column_tiles());
   EXPECT_EQ(1, parser_.frame_parallel_mode());
 }
 
+TEST_F(Vp9HeaderParserTests, Invalid) {
+  const char* files[] = {
+      "invalid/invalid_vp9_bitstream-bug_1416.webm",
+      "invalid/invalid_vp9_bitstream-bug_1417.webm",
+  };
+
+  for (int i = 0; i < static_cast<int>(sizeof(files) / sizeof(files[0])); ++i) {
+    SCOPED_TRACE(files[i]);
+    ASSERT_NO_FATAL_FAILURE(CreateAndLoadInvalidSegment(files[i]));
+    ProcessTheFrames(true);
+    CloseReader();
+    delete segment_;
+    segment_ = NULL;
+  }
+}
+
 }  // namespace
 
 int main(int argc, char* argv[]) {
diff --git a/mkvparser/mkvparser.cc b/mkvparser/mkvparser.cc
index 80814e0..a3995de 100644
--- a/mkvparser/mkvparser.cc
+++ b/mkvparser/mkvparser.cc
@@ -2430,7 +2430,9 @@
 }
 
 const CuePoint::TrackPosition* CuePoint::Find(const Track* pTrack) const {
-  assert(pTrack);
+  if (pTrack == NULL) {
+    return NULL;
+  }
 
   const long long n = pTrack->GetNumber();
 
@@ -7936,7 +7938,6 @@
     pf = m_frames;
     while (pf != pf_end) {
       Frame& f = *pf++;
-      assert((pos + f.len) <= stop);
       if ((pos + f.len) > stop)
         return E_FILE_FORMAT_INVALID;
 
diff --git a/testing/testdata/invalid/invalid_vp9_bitstream-bug_1416.webm b/testing/testdata/invalid/invalid_vp9_bitstream-bug_1416.webm
new file mode 100644
index 0000000..ac76dce
--- /dev/null
+++ b/testing/testdata/invalid/invalid_vp9_bitstream-bug_1416.webm
Binary files differ
diff --git a/testing/testdata/invalid/invalid_vp9_bitstream-bug_1417.webm b/testing/testdata/invalid/invalid_vp9_bitstream-bug_1417.webm
new file mode 100644
index 0000000..0cbd724
--- /dev/null
+++ b/testing/testdata/invalid/invalid_vp9_bitstream-bug_1417.webm
Binary files differ
diff --git a/vttdemux.cc b/vttdemux.cc
index c9abd5c..52a2661 100644
--- a/vttdemux.cc
+++ b/vttdemux.cc
@@ -523,8 +523,10 @@
     metadata_map_t::value_type& v = *i++;
     MetadataInfo& info = v.second;
 
-    fclose(info.file);
-    info.file = NULL;
+    if (info.file != NULL) {
+      fclose(info.file);
+      info.file = NULL;
+    }
   }
 }
 
diff --git a/webm_info.cc b/webm_info.cc
index 2f9c00d..1ce6590 100644
--- a/webm_info.cc
+++ b/webm_info.cc
@@ -709,8 +709,15 @@
 
   do {
     const size_t frame_length = (count > 0) ? sizes[i] : size;
+    if (frame_length > std::numeric_limits<int>::max() ||
+        static_cast<int>(frame_length) > size) {
+      fprintf(o, " invalid VP9 frame size (%u)\n",
+              static_cast<uint32_t>(frame_length));
+      return;
+    }
     parser->SetFrame(data, frame_length);
-    parser->ParseUncompressedHeader();
+    if (!parser->ParseUncompressedHeader())
+      return;
     level_stats->AddFrame(*parser, time_ns);
 
     // const int frame_marker = (data[0] >> 6) & 0x3;
@@ -1085,8 +1092,8 @@
   indent->Adjust(libwebm::kIncreaseIndent);
 
   do {
-    for (int track_num = 1; track_num <= num_tracks; ++track_num) {
-      const mkvparser::Track* const track = tracks.GetTrackByNumber(track_num);
+    for (int track_num = 0; track_num < num_tracks; ++track_num) {
+      const mkvparser::Track* const track = tracks.GetTrackByIndex(track_num);
       const mkvparser::CuePoint::TrackPosition* const track_pos =
           cue_point->Find(track);
 
@@ -1095,7 +1102,7 @@
             (track->GetType() == mkvparser::Track::kVideo) ? 'V' : 'A';
         fprintf(o, "%sCue Point:%d type:%c track:%d",
                 indent->indent_str().c_str(), cue_point_num, track_type,
-                track_num);
+                static_cast<int>(track->GetNumber()));
 
         if (options.output_seconds) {
           fprintf(o, " secs:%g",
