summaryrefslogtreecommitdiff
path: root/src/av-cp
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2016-08-17 22:27:32 +0200
committerJens Georg <mail@jensge.org>2016-12-17 09:47:40 +0100
commit05f8b8af616e08b98626b7c0e8d7f7f08f46434a (patch)
tree5ac0d323c90be3f762e328704e0a5c7569948bfd /src/av-cp
parent78fb21949678f0d5ab7eee6b8fd52a9524d5ad28 (diff)
downloadgupnp-tools-05f8b8af616e08b98626b7c0e8d7f7f08f46434a.tar.gz
av-cp: Fix crash on invalid search expression
Signed-off-by: Jens Georg <mail@jensge.org>
Diffstat (limited to 'src/av-cp')
-rw-r--r--src/av-cp/search-dialog.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/av-cp/search-dialog.c b/src/av-cp/search-dialog.c
index 5774782..cc33509 100644
--- a/src/av-cp/search-dialog.c
+++ b/src/av-cp/search-dialog.c
@@ -143,7 +143,7 @@ search_dialog_on_search_done (GObject *source, GAsyncResult *res, gpointer user_
SearchDialogPrivate *priv = search_dialog_get_instance_private (self);
GError *error = NULL;
- char *xml;
+ char *xml = NULL;
guint32 total = 0;
guint32 returned = 0;
GUPnPDIDLLiteParser *parser;
@@ -155,8 +155,21 @@ search_dialog_on_search_done (GObject *source, GAsyncResult *res, gpointer user_
&total,
&returned,
&error)) {
+ GtkWidget *dialog = NULL;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (self),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_CLOSE,
+ "Search failed: %s",
+ error->message);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+
g_critical ("Failed to search: %s", error->message),
g_error_free (error);
+
+ goto out;
}
parser = gupnp_didl_lite_parser_new ();
@@ -164,6 +177,9 @@ search_dialog_on_search_done (GObject *source, GAsyncResult *res, gpointer user_
G_CALLBACK (on_didl_object_available),
self);
gupnp_didl_lite_parser_parse_didl (parser, xml, &error);
+ g_free (xml);
+
+out:
g_source_remove (priv->pulse_timer);
gtk_entry_set_progress_fraction (priv->search_dialog_entry, 0.0);
gtk_widget_set_sensitive (GTK_WIDGET (priv->search_dialog_entry), TRUE);