[rygel] Fix segfault on folder plugin



commit 2000ae8b21f1f251ce0a7621f879135bf9775965
Author: Jens Georg <mail jensge org>
Date:   Wed Apr 29 23:55:11 2009 +0200

    Fix segfault on folder plugin
---
 src/plugins/folder/rygel-folder-media-item.vala    |    8 ++++++--
 src/plugins/folder/rygel-folder-rootcontainer.vala |    9 ++++++---
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/plugins/folder/rygel-folder-media-item.vala b/src/plugins/folder/rygel-folder-media-item.vala
index f11dddf..1253131 100644
--- a/src/plugins/folder/rygel-folder-media-item.vala
+++ b/src/plugins/folder/rygel-folder-media-item.vala
@@ -21,13 +21,17 @@
 using GLib;
 using Rygel;
 
+public errordomain MediaItemError {
+    INVALID_CONTENT_TYPE
+}
+
 /**
  * Very simple media item. 
  */
 public class Folder.FilesystemMediaItem : Rygel.MediaItem {
     public FilesystemMediaItem(MediaContainer parent, 
                                File file, 
-                               FileInfo file_info) {
+                               FileInfo file_info) throws MediaItemError {
         string item_class;
         var content_type = file_info.get_content_type();
 
@@ -41,7 +45,7 @@ public class Folder.FilesystemMediaItem : Rygel.MediaItem {
             item_class = MediaItem.IMAGE_CLASS;
         }
         else {
-            return;
+            throw new MediaItemError.INVALID_CONTENT_TYPE("content_type %s not supported by plugin".printf(content_type));
         }
 
         base(Checksum.compute_for_string(ChecksumType.MD5, file_info.get_name()), 
diff --git a/src/plugins/folder/rygel-folder-rootcontainer.vala b/src/plugins/folder/rygel-folder-rootcontainer.vala
index 3a139b8..26f3d03 100644
--- a/src/plugins/folder/rygel-folder-rootcontainer.vala
+++ b/src/plugins/folder/rygel-folder-rootcontainer.vala
@@ -98,9 +98,12 @@ public class Folder.FolderRootContainer : MediaContainer {
             if (list != null) {
                 foreach (FileInfo info in list) {
                     var file = this.root_dir.get_child(info.get_name());
-                    var item = new FilesystemMediaItem(this, file, info);
-                    /*if (item != null)
-                        items.add(item); */
+                    try {
+                        var item = new FilesystemMediaItem(this, file, info);
+                        items.add(item);
+                    } catch (MediaItemError err) {
+                        // most likely invalid content type
+                    }
                 }
                 file_enumerator.next_files_async (MAX_CHILDREN, 
                                                   Priority.DEFAULT, 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]