vlc | branch: master | Felix Paul Kühne <fe...@feepk.net> | Tue Jan 28 11:19:47 
2020 +0100| [c6cca200433e0d3f0efa4f2ba8f1f636472af68e] | committer: Felix Paul 
Kühne

macosx/library: add missing sanity checks to model

Creating data structures can fail for many reasons. Handle this scenario 
gracefully.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c6cca200433e0d3f0efa4f2ba8f1f636472af68e
---

 modules/gui/macosx/library/VLCLibraryModel.m | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/modules/gui/macosx/library/VLCLibraryModel.m 
b/modules/gui/macosx/library/VLCLibraryModel.m
index 0b4b4d9e7e..d46ec3a6fb 100644
--- a/modules/gui/macosx/library/VLCLibraryModel.m
+++ b/modules/gui/macosx/library/VLCLibraryModel.m
@@ -74,6 +74,9 @@ static void libraryCallback(void *p_data, const 
vlc_ml_event_t *p_event)
         case VLC_ML_EVENT_MEDIA_THUMBNAIL_GENERATED:
             if (p_event->media_thumbnail_generated.b_success) {
                 VLCMediaLibraryMediaItem *mediaItem = 
[[VLCMediaLibraryMediaItem alloc] initWithMediaItem:(struct vlc_ml_media_t 
*)p_event->media_thumbnail_generated.p_media];
+                if (mediaItem == nil) {
+                    return;
+                }
                 dispatch_async(dispatch_get_main_queue(), ^{
                     VLCLibraryModel *libraryModel = (__bridge VLCLibraryModel 
*)p_data;
                     [libraryModel mediaItemWasUpdated:mediaItem];
@@ -145,7 +148,9 @@ static void libraryCallback(void *p_data, const 
vlc_ml_event_t *p_event)
         NSMutableArray *mutableArray = [[NSMutableArray alloc] 
initWithCapacity:p_media_list->i_nb_items];
         for (size_t x = 0; x < p_media_list->i_nb_items; x++) {
             VLCMediaLibraryMediaItem *mediaItem = [[VLCMediaLibraryMediaItem 
alloc] initWithMediaItem:&p_media_list->p_items[x]];
-            [mutableArray addObject:mediaItem];
+            if (mediaItem != nil) {
+                [mutableArray addObject:mediaItem];
+            }
         }
         vlc_ml_media_list_release(p_media_list);
         dispatch_async(dispatch_get_main_queue(), ^{
@@ -178,7 +183,9 @@ static void libraryCallback(void *p_data, const 
vlc_ml_event_t *p_event)
         NSMutableArray *mutableArray = [[NSMutableArray alloc] 
initWithCapacity:p_artist_list->i_nb_items];
         for (size_t x = 0; x < p_artist_list->i_nb_items; x++) {
             VLCMediaLibraryArtist *artist = [[VLCMediaLibraryArtist alloc] 
initWithArtist:&p_artist_list->p_items[x]];
-            [mutableArray addObject:artist];
+            if (artist != nil) {
+                [mutableArray addObject:artist];
+            }
         }
         vlc_ml_artist_list_release(p_artist_list);
         dispatch_async(dispatch_get_main_queue(), ^{
@@ -287,7 +294,9 @@ static void libraryCallback(void *p_data, const 
vlc_ml_event_t *p_event)
         NSMutableArray *mutableArray = [[NSMutableArray alloc] 
initWithCapacity:p_media_list->i_nb_items];
         for (size_t x = 0; x < p_media_list->i_nb_items; x++) {
             VLCMediaLibraryMediaItem *mediaItem = [[VLCMediaLibraryMediaItem 
alloc] initWithMediaItem:&p_media_list->p_items[x]];
-            [mutableArray addObject:mediaItem];
+            if (mediaItem != nil) {
+                [mutableArray addObject:mediaItem];
+            }
         }
         vlc_ml_media_list_release(p_media_list);
         dispatch_async(dispatch_get_main_queue(), ^{
@@ -321,7 +330,9 @@ static void libraryCallback(void *p_data, const 
vlc_ml_event_t *p_event)
         NSMutableArray *mutableArray = [[NSMutableArray alloc] 
initWithCapacity:p_media_list->i_nb_items];
         for (size_t x = 0; x < p_media_list->i_nb_items; x++) {
             VLCMediaLibraryMediaItem *mediaItem = [[VLCMediaLibraryMediaItem 
alloc] initWithMediaItem:&p_media_list->p_items[x]];
-            [mutableArray addObject:mediaItem];
+            if (mediaItem != nil) {
+                [mutableArray addObject:mediaItem];
+            }
         }
         vlc_ml_media_list_release(p_media_list);
         dispatch_async(dispatch_get_main_queue(), ^{

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to