Only call ogg_stream_clear() if stream opened.
authorLuc Trudeau <luc.trudeau.1@ens.etsmtl.ca>
Wed, 2 Mar 2016 02:07:28 +0000 (21:07 -0500)
committerNathan E. Egge <negge@dgql.org>
Tue, 8 Mar 2016 18:04:13 +0000 (13:04 -0500)
The function ogg_stream_init() is only called if the input file exists
 and if the headers are decoded.
This fixes crashes when a file that does not exist or a file that is not
 an ogg file is opened by the analyzer.

Signed-off-by: Nathan E. Egge <negge@dgql.org>
examples/analyzer.cc

index 8d188fe..5626a7c 100644 (file)
@@ -224,6 +224,7 @@ bool DaalaDecoder::open(const wxString &path) {
   ogg_sync_init(&oy);
   input = fopen(path.mb_str(), "rb");
   if (input == NULL) {
+    fprintf(stderr, "Could not find file '%s'.\n", path.mb_str().data());
     return false;
   }
   this->path = path;
@@ -239,13 +240,13 @@ void DaalaDecoder::close() {
   if (dsi) {
     daala_setup_free(dsi);
     dsi = NULL;
+    ogg_stream_clear(&os);
   }
   if (dctx) {
     daala_decode_free(dctx);
     dctx = NULL;
   }
   ogg_sync_clear(&oy);
-  ogg_stream_clear(&os);
   daala_info_clear(&di);
   daala_comment_clear(&dc);
 }