diff options
author | Damien Zammit <damien@zamaudio.com> | 2014-04-29 06:44:40 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2014-04-29 06:48:29 +1000 |
commit | 2f6065b32c26dba0f7ea5da5c980d0406c36cc55 (patch) | |
tree | 32e72f96535480bbb6ae346e69866c03a61a6b3a /libs/ardour | |
parent | f5276a104c2d544cf537db9e9b8de9022de7ad56 (diff) |
Fixed problem where importing invalid midi files caused crash.3.5.380
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/smf_source.h | 1 | ||||
-rw-r--r-- | libs/ardour/smf_source.cc | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h index 9c0a78f282..a068a3e385 100644 --- a/libs/ardour/ardour/smf_source.h +++ b/libs/ardour/ardour/smf_source.h @@ -77,6 +77,7 @@ public: void ensure_disk_file (); static bool safe_midi_file_extension (const std::string& path); + static bool valid_midi_file (const std::string& path); void prevent_deletion (); diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index d52923c302..c3bc78c83d 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -34,6 +34,7 @@ #include <glibmm/fileutils.h> #include "evoral/Control.hpp" +#include "evoral/evoral/SMF.hpp" #include "ardour/event_type_map.h" #include "ardour/midi_model.h" @@ -48,6 +49,7 @@ using namespace ARDOUR; using namespace Glib; using namespace PBD; +using namespace Evoral; /** Constructor used for new internal-to-session files. File cannot exist. */ SMFSource::SMFSource (Session& s, const string& path, Source::Flag flags) @@ -497,6 +499,15 @@ SMFSource::mark_midi_streaming_write_completed (Evoral::Sequence<Evoral::Musical } bool +SMFSource::valid_midi_file (const string& file) +{ + if (safe_midi_file_extension (file) ) { + return (SMF::test (file) ); + } + return false; +} + +bool SMFSource::safe_midi_file_extension (const string& file) { static regex_t compiled_pattern; |