[rygel] server: Fix potential null access warnings
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] server: Fix potential null access warnings
- Date: Sun, 23 Feb 2020 11:41:24 +0000 (UTC)
commit 767bfb2800b3975d96aead052a86d369bebf53bf
Author: Jens Georg <mail jensge org>
Date: Thu Feb 13 23:32:48 2020 +0100
server: Fix potential null access warnings
src/librygel-server/rygel-content-directory.vala | 6 ++--
.../rygel-dtcp-cleartext-request.vala | 14 +++++----
src/librygel-server/rygel-http-get.vala | 4 +--
src/librygel-server/rygel-http-item-uri.vala | 6 ++--
src/librygel-server/rygel-http-post.vala | 7 +++--
src/librygel-server/rygel-import-resource.vala | 10 +++++--
src/librygel-server/rygel-item-destroyer.vala | 5 ++--
src/librygel-server/rygel-media-container.vala | 6 ++--
src/librygel-server/rygel-media-object.vala | 6 ++--
src/librygel-server/rygel-object-creator.vala | 34 +++++++++++++---------
src/librygel-server/rygel-panasonic-hacks.vala | 11 ++-----
src/librygel-server/rygel-playspeed-request.vala | 7 +++--
.../rygel-relational-expression.vala | 30 +++++++------------
src/librygel-server/rygel-samsung-tv-hacks.vala | 19 +++++-------
src/librygel-server/rygel-simple-container.vala | 2 +-
15 files changed, 85 insertions(+), 82 deletions(-)
---
diff --git a/src/librygel-server/rygel-content-directory.vala
b/src/librygel-server/rygel-content-directory.vala
index 0b432cd9..99f2b9c6 100644
--- a/src/librygel-server/rygel-content-directory.vala
+++ b/src/librygel-server/rygel-content-directory.vala
@@ -472,8 +472,10 @@ public class Rygel.ContentDirectory: Service {
object.object_update_id = this.system_update_id;
// Whenever container experiences object update it also
// experiences a container update
- if (object is MediaContainer) {
- (object as MediaContainer).update_id = this.system_update_id;
+
+ var container = object as MediaContainer;
+ if (container != null) {
+ container.update_id = this.system_update_id;
}
return container_changed;
diff --git a/src/librygel-server/rygel-dtcp-cleartext-request.vala
b/src/librygel-server/rygel-dtcp-cleartext-request.vala
index 32070de5..3dfc6d8d 100644
--- a/src/librygel-server/rygel-dtcp-cleartext-request.vala
+++ b/src/librygel-server/rygel-dtcp-cleartext-request.vala
@@ -58,9 +58,9 @@ public class Rygel.DTCPCleartextRequest : Rygel.HTTPSeekRequest {
// It's only possible to get the cleartext size from a MediaResource
// (and only if it is link protected)
- if (handler is HTTPMediaResourceHandler) {
- var resource = (handler as HTTPMediaResourceHandler)
- .media_resource;
+ var resource_handler = handler as HTTPMediaResourceHandler;
+ if (resource_handler != null) {
+ var resource = resource_handler.media_resource;
total_size = resource.cleartext_size;
if (total_size <= 0) {
// Even if it's a resource and the content is link-protected,
@@ -148,9 +148,11 @@ public class Rygel.DTCPCleartextRequest : Rygel.HTTPSeekRequest {
public static bool supported (Soup.Message message,
Rygel.HTTPGetHandler handler) {
- return (handler is HTTPMediaResourceHandler)
- && (handler as HTTPMediaResourceHandler)
- .media_resource.is_cleartext_range_support_enabled ();
+ var resource_handler = handler as HTTPMediaResourceHandler;
+
+ return (resource_handler != null)
+ && resource_handler.media_resource
+ .is_cleartext_range_support_enabled ();
}
public static bool requested (Soup.Message message) {
diff --git a/src/librygel-server/rygel-http-get.vala b/src/librygel-server/rygel-http-get.vala
index d2084c74..bfabc9bd 100644
--- a/src/librygel-server/rygel-http-get.vala
+++ b/src/librygel-server/rygel-http-get.vala
@@ -105,8 +105,8 @@ public class Rygel.HTTPGet : HTTPRequest {
return;
}
- if (unlikely ((this.object is MediaFileItem)
- && (this.object as MediaFileItem).place_holder)) {
+ var item = this.object as MediaFileItem;
+ if (item != null && item.place_holder) {
throw new HTTPRequestError.NOT_FOUND ("Item '%s' is empty",
this.object.id);
}
diff --git a/src/librygel-server/rygel-http-item-uri.vala b/src/librygel-server/rygel-http-item-uri.vala
index d74e8d25..dd64ed7c 100644
--- a/src/librygel-server/rygel-http-item-uri.vala
+++ b/src/librygel-server/rygel-http-item-uri.vala
@@ -76,13 +76,13 @@ public class Rygel.HTTPItemURI : Object {
var item = object as MediaFileItem;
if (thumbnail_index > -1) {
if (item is VisualItem) {
- var thumbnails = (item as VisualItem).thumbnails;
+ var thumbnails = ((VisualItem) item).thumbnails;
if (thumbnails.size > thumbnail_index) {
this.extension = thumbnails[thumbnail_index].file_extension;
}
} else if (item is MusicItem) {
- var album_art = (item as MusicItem).album_art;
+ var album_art = ((MusicItem) item).album_art;
if (album_art != null) {
this.extension = album_art.file_extension;
@@ -90,7 +90,7 @@ public class Rygel.HTTPItemURI : Object {
}
} else if (subtitle_index > -1) {
if (item is VideoItem) {
- var subtitles = (item as VideoItem).subtitles;
+ var subtitles = ((VideoItem) item).subtitles;
if (subtitles.size > subtitle_index) {
this.extension = subtitles[subtitle_index].caption_type;
diff --git a/src/librygel-server/rygel-http-post.vala b/src/librygel-server/rygel-http-post.vala
index b2a9efd7..d511a4b3 100644
--- a/src/librygel-server/rygel-http-post.vala
+++ b/src/librygel-server/rygel-http-post.vala
@@ -58,14 +58,15 @@ internal class Rygel.HTTPPost : HTTPRequest {
}
private async void handle_real () throws Error {
- if (!(this.object as MediaFileItem).place_holder) {
+ var item = (MediaFileItem) this.object;
+
+ if (!item.place_holder) {
var msg = _("Pushing data to non-empty item “%s” not allowed");
throw new ContentDirectoryError.INVALID_ARGS (msg, this.object.id);
}
- this.file = yield (this.object as MediaFileItem).get_writable
- (this.cancellable);
+ this.file = yield item.get_writable (this.cancellable);
if (this.file == null) {
throw new HTTPRequestError.BAD_REQUEST
(_("No writable URI for %s available"),
diff --git a/src/librygel-server/rygel-import-resource.vala b/src/librygel-server/rygel-import-resource.vala
index 3767074d..78f9a6d7 100644
--- a/src/librygel-server/rygel-import-resource.vala
+++ b/src/librygel-server/rygel-import-resource.vala
@@ -180,12 +180,16 @@ internal class Rygel.ImportResource : GLib.Object, Rygel.StateMachine {
null);
string msg = null;
+ var media_item = media_object as MediaFileItem;
+
if (media_object == null ||
- !(media_object is MediaFileItem) ||
+ media_item == null ||
!(media_object.parent is WritableContainer)) {
msg = _("URI “%s” invalid for importing contents to").printf
(this.destination_uri);
- } else if (!(media_object as MediaFileItem).place_holder) {
+ }
+
+ else if (!media_item.place_holder) {
msg = _("Pushing data to non-empty item “%s” not allowed").printf
(media_object.id);
} else if (media_object.get_uris ().is_empty) {
@@ -196,7 +200,7 @@ internal class Rygel.ImportResource : GLib.Object, Rygel.StateMachine {
throw new ContentDirectoryError.INVALID_ARGS (msg);
}
- return media_object as MediaFileItem;
+ return media_item;
}
private void got_headers_cb (Message message) {
diff --git a/src/librygel-server/rygel-item-destroyer.vala b/src/librygel-server/rygel-item-destroyer.vala
index 911378f6..be43da3f 100644
--- a/src/librygel-server/rygel-item-destroyer.vala
+++ b/src/librygel-server/rygel-item-destroyer.vala
@@ -76,11 +76,12 @@ internal class Rygel.ItemDestroyer: GLib.Object, Rygel.StateMachine {
private async void remove_object () throws Error {
var media_object = yield this.fetch_object ();
var parent = media_object.parent as WritableContainer;
+ var item = media_object as MediaFileItem;
- if (media_object is MediaFileItem ) {
+ if (item != null) {
yield parent.remove_item (this.object_id, this.cancellable);
- if (!(media_object as MediaFileItem).place_holder) {
+ if (!item.place_holder) {
var writables = yield media_object.get_writables (this.cancellable);
foreach (var file in writables) {
if (file.query_exists (this.cancellable)) {
diff --git a/src/librygel-server/rygel-media-container.vala b/src/librygel-server/rygel-media-container.vala
index d9f9ed44..631cc5e0 100644
--- a/src/librygel-server/rygel-media-container.vala
+++ b/src/librygel-server/rygel-media-container.vala
@@ -148,7 +148,7 @@ internal class Rygel.PlaylistDatasource : Rygel.DataSource, Object {
* interface.
*
* If the container should support the change tracking profile of the UPnP
- * ContentDirectory:3 specification then you should also implement the
+ * ContentDirectory:3 specification then you should also implement the
* #RygelTrackableContainer interface.
*
* The #RygelSimpleContainer class contains a simple memory-based container
@@ -345,7 +345,7 @@ public abstract class Rygel.MediaContainer : MediaObject {
* for this container, if items under it are removed or added, if
* there are metadata changes to items under it, etc.
*
- * If sub_tree_update is true then the caller should later emit the
+ * If sub_tree_update is true then the caller should later emit the
* sub_tree_updates_finished signal on the root container of the sub-tree
* that was updated.
*
@@ -432,7 +432,7 @@ public abstract class Rygel.MediaContainer : MediaObject {
// If the container is searchable then it must add search class parameters.
if (this is SearchableContainer) {
- (this as SearchableContainer).serialize_search_parameters
+ ((SearchableContainer) this).serialize_search_parameters
(didl_container);
}
diff --git a/src/librygel-server/rygel-media-object.vala b/src/librygel-server/rygel-media-object.vala
index d3e450b4..c4300d87 100644
--- a/src/librygel-server/rygel-media-object.vala
+++ b/src/librygel-server/rygel-media-object.vala
@@ -260,8 +260,8 @@ public abstract class Rygel.MediaObject : GLib.Object {
-1,
-1,
res.get_name ());
- if (this is MediaFileItem &&
- (this as MediaFileItem).place_holder) {
+ var media_item = this as MediaFileItem;
+ if (media_item != null && media_item.place_holder) {
res.import_uri = uri;
} else {
res.uri = uri;
@@ -374,7 +374,7 @@ public abstract class Rygel.MediaObject : GLib.Object {
if (result == DIDLLiteFragmentResult.OK) {
this.apply_didl_lite (didl_object);
if (this is UpdatableObject) {
- yield (this as UpdatableObject).commit ();
+ yield ((UpdatableObject) this).commit ();
}
}
diff --git a/src/librygel-server/rygel-object-creator.vala b/src/librygel-server/rygel-object-creator.vala
index 7c5ca864..86dda358 100644
--- a/src/librygel-server/rygel-object-creator.vala
+++ b/src/librygel-server/rygel-object-creator.vala
@@ -152,10 +152,10 @@ internal class Rygel.ObjectCreator: GLib.Object, Rygel.StateMachine {
yield this.create_object_from_didl (container);
if (this.object is MediaFileItem) {
- yield container.add_item (this.object as MediaFileItem,
+ yield container.add_item ((MediaFileItem) this.object,
this.cancellable);
} else {
- yield container.add_container (this.object as MediaContainer,
+ yield container.add_container ((MediaContainer) this.object,
this.cancellable);
}
@@ -166,9 +166,11 @@ internal class Rygel.ObjectCreator: GLib.Object, Rygel.StateMachine {
// Conclude the successful action
this.conclude ();
+ var item = this.object as MediaFileItem;
+
if (this.container_id == MediaContainer.ANY &&
- (this.object is MediaFileItem &&
- (this.object as MediaFileItem).place_holder)) {
+ (item != null) &&
+ item.place_holder) {
var queue = ObjectRemovalQueue.get_default ();
queue.queue (this.object, this.cancellable);
@@ -518,16 +520,18 @@ internal class Rygel.ObjectCreator: GLib.Object, Rygel.StateMachine {
}
// extract_item_parameters could not find an uri
+ var item = this.object as MediaFileItem;
+
if (this.object.get_uris ().is_empty) {
var uri = yield this.create_uri (container, this.object.title);
this.object.add_uri (uri);
- if (this.object is MediaFileItem) {
- (this.object as MediaFileItem).place_holder = true;
+ if (item != null) {
+ item.place_holder = true;
}
} else {
- if (this.object is MediaFileItem) {
+ if (item != null) {
var file = File.new_for_uri (this.object.get_primary_uri ());
- (this.object as MediaFileItem).place_holder = !file.is_native ();
+ item.place_holder = !file.is_native ();
}
}
@@ -579,19 +583,23 @@ internal class Rygel.ObjectCreator: GLib.Object, Rygel.StateMachine {
}
private void parse_and_verify_didl_date () throws Error {
- if (!(this.didl_object is DIDLLiteItem)) {
+ var didl_item = this.didl_object as DIDLLiteItem;
+ if (didl_item == null) {
+ return;
+ }
+
+ var item = this.object as MediaFileItem;
+ if (item == null) {
return;
}
- var didl_item = this.didl_object as DIDLLiteItem;
if (didl_item.date == null) {
return;
}
var parsed_date = new Soup.Date.from_string (didl_item.date);
if (parsed_date != null) {
- (this.object as MediaFileItem).date = parsed_date.to_string
- (Soup.DateFormat.ISO8601);
+ item.date = parsed_date.to_string (Soup.DateFormat.ISO8601);
return;
}
@@ -616,7 +624,7 @@ internal class Rygel.ObjectCreator: GLib.Object, Rygel.StateMachine {
didl_item.date);
}
- (this.object as MediaFileItem).date = didl_item.date + "T00:00:00";
+ item.date = didl_item.date + "T00:00:00";
}
private MediaObject create_object (string id,
diff --git a/src/librygel-server/rygel-panasonic-hacks.vala b/src/librygel-server/rygel-panasonic-hacks.vala
index e7553380..16499b4d 100644
--- a/src/librygel-server/rygel-panasonic-hacks.vala
+++ b/src/librygel-server/rygel-panasonic-hacks.vala
@@ -43,13 +43,8 @@ internal class Rygel.PanasonicHacks : ClientHacks {
}
public override void apply (MediaObject object) {
- if (!(object is MediaFileItem)) {
- return;
- }
-
- var item = object as MediaFileItem;
-
- if (!(item is VisualItem)) {
+ var item = object as VisualItem;
+ if (item == null) {
return;
}
@@ -57,7 +52,7 @@ internal class Rygel.PanasonicHacks : ClientHacks {
// type JPEG. This is correct from a DLNA pov, but we usually only
// supply PNG. When fooled into accepting it, they're rendered fine,
// however.
- foreach (var thumbnail in (item as VisualItem).thumbnails) {
+ foreach (var thumbnail in item.thumbnails) {
try {
thumbnail.mime_type = mime_regex.replace_literal
(thumbnail.mime_type, -1, 0, "jpeg");
diff --git a/src/librygel-server/rygel-playspeed-request.vala
b/src/librygel-server/rygel-playspeed-request.vala
index f9580043..33fa1cd6 100644
--- a/src/librygel-server/rygel-playspeed-request.vala
+++ b/src/librygel-server/rygel-playspeed-request.vala
@@ -83,9 +83,10 @@ public class Rygel.PlaySpeedRequest : GLib.Object {
// Normal rate is always valid. Just check for valid scaled rate
if (!speed.is_normal_rate ()) {
// Validate if playspeed is listed in the protocolInfo
- if (request.handler is HTTPMediaResourceHandler) {
- var resource = (request.handler as HTTPMediaResourceHandler)
- .media_resource;
+ var resource_handler = request.handler as HTTPMediaResourceHandler;
+
+ if (resource_handler != null) {
+ var resource = resource_handler.media_resource;
var speeds = resource.play_speeds;
var found_speed = false;
foreach (var speed in speeds) {
diff --git a/src/librygel-server/rygel-relational-expression.vala
b/src/librygel-server/rygel-relational-expression.vala
index a3f0eed6..ec55e9ce 100644
--- a/src/librygel-server/rygel-relational-expression.vala
+++ b/src/librygel-server/rygel-relational-expression.vala
@@ -79,31 +79,23 @@ public class Rygel.RelationalExpression :
return this.compare_create_class
(media_object as WritableContainer);
- case "dc:creator":
- if (!(media_object is PhotoItem)) {
- return false;
- }
+ case "dc:creator": {
+ var item = media_object as PhotoItem;
- return this.compare_string ((media_object as PhotoItem).creator);
- case "upnp:artist":
- if (!(media_object is MusicItem)) {
- return false;
- }
+ return item != null && this.compare_string (item.creator);
+ }
+ case "upnp:artist": {
+ var item = media_object as MusicItem;
- return this.compare_string ((media_object as MusicItem).artist);
+ return item != null && this.compare_string (item.artist);
+ }
case "upnp:album":
- if (!(media_object is MusicItem)) {
- return false;
- }
+ var item = media_object as MusicItem;
- return this.compare_string ((media_object as MusicItem).album);
+ return item != null && this.compare_string (item.album);
case "@childCount":
- if (!(media_object is MediaContainer)) {
- return false;
- }
-
var container = media_object as MediaContainer;
- return this.compare_int (container.child_count);
+ return container != null && this.compare_int (container.child_count);
default:
return false;
}
diff --git a/src/librygel-server/rygel-samsung-tv-hacks.vala b/src/librygel-server/rygel-samsung-tv-hacks.vala
index adc4146f..b005e656 100644
--- a/src/librygel-server/rygel-samsung-tv-hacks.vala
+++ b/src/librygel-server/rygel-samsung-tv-hacks.vala
@@ -57,13 +57,8 @@ internal class Rygel.SamsungTVHacks : ClientHacks {
}
}
- if (!(object is MediaFileItem)) {
- return;
- }
-
- var item = object as MediaFileItem;
-
- if (!(item is VisualItem)) {
+ var item = object as VisualItem;
+ if (item == null) {
return;
}
@@ -72,7 +67,7 @@ internal class Rygel.SamsungTVHacks : ClientHacks {
// supply PNG. When fooled into accepting it, they're rendered fine,
// however.
// TODO: Unifiy with Panasonic hack!
- foreach (var thumbnail in (item as VisualItem).thumbnails) {
+ foreach (var thumbnail in item.thumbnails) {
try {
thumbnail.mime_type = mime_regex.replace_literal
(thumbnail.mime_type, -1, 0, "jpeg");
@@ -89,11 +84,13 @@ internal class Rygel.SamsungTVHacks : ClientHacks {
}
public override void modify_headers (HTTPRequest request) {
+ var item = request.object as VideoItem;
+
if (request.msg.request_headers.get_one ("getCaptionInfo.sec") != null
- && (request.object is VideoItem)
- && (request.object as VideoItem).subtitles.size > 0) {
+ && item != null
+ && item.subtitles.size > 0) {
var caption_uri = request.http_server.create_uri_for_object
- (request.object as MediaItem,
+ (item,
-1,
0, // FIXME: offer first subtitle only?
null);
diff --git a/src/librygel-server/rygel-simple-container.vala b/src/librygel-server/rygel-simple-container.vala
index db24c8fa..929524d1 100644
--- a/src/librygel-server/rygel-simple-container.vala
+++ b/src/librygel-server/rygel-simple-container.vala
@@ -108,7 +108,7 @@ public class Rygel.SimpleContainer : Rygel.MediaContainer,
*/
public void add_child_container (MediaContainer child) {
if (child is SearchableContainer) {
- var search_classes = (child as SearchableContainer).search_classes;
+ var search_classes = ((SearchableContainer) child).search_classes;
this.search_classes.add_all (search_classes);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]