add to typecasting 'File' because crash occur for TC 14/235814/4
authorjiyong.min <jiyong.min@samsung.com>
Wed, 10 Jun 2020 03:05:48 +0000 (12:05 +0900)
committerjiyong.min <jiyong.min@samsung.com>
Wed, 10 Jun 2020 22:05:28 +0000 (07:05 +0900)
  - Using 'delete _metadata->file' make crash.

Change-Id: Id1d3a318ebdc270d0ae976acc0e6043748104384

src/metadata_editor.cpp

index 6dbe835acbcea3796e6236555e99707e09b5f732..24b8d64f71a2c189bfd3adbf45b2e1a7bba8181e 100755 (executable)
@@ -1505,8 +1505,31 @@ extern "C" int metadata_editor_destroy(metadata_editor_h metadata)
 
        metadata_editor_retvm_if(!_metadata, METADATA_EDITOR_ERROR_INVALID_PARAMETER, "Invalid metadata");
 
-       if (_metadata->file)
-               delete _metadata->file;
+       switch (_metadata->filetype) {
+       case METADATA_EDITOR_FORMAT_MP3:
+               delete dynamic_cast<TagLib::MPEG::File*>(_metadata->file);
+               break;
+       case METADATA_EDITOR_FORMAT_MP4:
+               delete dynamic_cast<TagLib::MP4::File*>(_metadata->file);
+               break;
+#if 0
+       case METADATA_EDITOR_FORMAT_FLAC:
+               delete dynamic_cast<TagLib::FLAC::File*>(_metadata->file);
+               break;
+       case METADATA_EDITOR_FORMAT_OGG_VORBIS:
+               delete dynamic_cast<TagLib::Ogg::Vorbis::File*>(_metadata->file);
+               break;
+       case METADATA_EDITOR_FORMAT_OGG_FLAC:
+               delete dynamic_cast<TagLib::Ogg::FLAC::File*>(_metadata->file);
+               break;
+       case METADATA_EDITOR_FORMAT_WAV:
+               delete dynamic_cast<TagLib::RIFF::WAV::File*>(_metadata->file);
+               break;
+#endif
+       default:
+               metadata_editor_error("Wrong file type");
+               return METADATA_EDITOR_ERROR_INVALID_PARAMETER;
+       }
 
        g_free(_metadata);