X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Futil.cc;h=574d1d8894a94b9a6735e81b2246b9632dc8f2b8;hb=67a68bd971ebe1b35daa3f75873b4ccb53c00ba0;hp=38451e9314e9bbd67da2afeb9a226115727ead83;hpb=00b60f52add041a36fa62118baf4b5ac78993980;p=dcpomatic.git diff --git a/src/lib/util.cc b/src/lib/util.cc index 38451e931..574d1d889 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -462,7 +462,7 @@ digest_head_tail (vector files, boost::uintmax_t size) /** Round a number up to the nearest multiple of another number. * @param c Index. - * @param s Array of numbers to round, indexed by c. + * @param stride Array of numbers to round, indexed by c. * @param t Multiple to round to. * @return Rounded number. */ @@ -533,8 +533,8 @@ short_audio_channel_name (int c) _("BsR"), _("DBP"), _("DBS"), - _(""), - _("") + "", + "" }; return channels[c]; @@ -557,6 +557,18 @@ valid_image_file (boost::filesystem::path f) ); } +bool +valid_sound_file (boost::filesystem::path f) +{ + if (boost::starts_with (f.leaf().string(), "._")) { + return false; + } + + string ext = f.extension().string(); + transform (ext.begin(), ext.end(), ext.begin(), ::tolower); + return (ext == ".wav" || ext == ".mp3" || ext == ".aif" || ext == ".aiff"); +} + bool valid_j2k_file (boost::filesystem::path f) { @@ -646,7 +658,7 @@ video_asset_filename (shared_ptr asset, int reel_index, int r values['r'] = raw_convert (reel_index + 1); values['n'] = raw_convert (reel_count); if (summary) { - values['c'] = summary.get(); + values['c'] = careful_string_filter (summary.get()); } return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf"); } @@ -659,7 +671,7 @@ audio_asset_filename (shared_ptr asset, int reel_index, int ree values['r'] = raw_convert (reel_index + 1); values['n'] = raw_convert (reel_count); if (summary) { - values['c'] = summary.get(); + values['c'] = careful_string_filter (summary.get()); } return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf"); } @@ -675,3 +687,22 @@ relaxed_string_to_float (string s) return lexical_cast (s); } } + +string +careful_string_filter (string s) +{ + /* Filter out `bad' characters which `may' cause problems with some systems (either for DCP name or filename). + There's no apparent list of what really is allowed, so this is a guess. + Safety first and all that. + */ + + string out; + string const allowed = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_%."; + for (size_t i = 0; i < s.size(); ++i) { + if (allowed.find (s[i]) != string::npos) { + out += s[i]; + } + } + + return out; +}