!3 Port to gupnp-1.2 and add patch to fix bug.
From: @dwl301 Reviewed-by: @small_leek Signed-off-by: @small_leek
This commit is contained in:
commit
02fa663377
@ -0,0 +1,66 @@
|
|||||||
|
From 3f62e9fbd3de11df52184ca8dfcabfb7d1c0fdeb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robert Tiemann <rtie@gmx.de>
|
||||||
|
Date: Fri, 17 May 2019 12:43:04 +0200
|
||||||
|
Subject: [PATCH] Avoid possible crash when getting server properties.
|
||||||
|
|
||||||
|
The crash occurs when calling dls_device_get_all_props() for a content
|
||||||
|
directory server that we have not yet subscribed to (that is,
|
||||||
|
prv_cds_subscribed() returns FALSE in
|
||||||
|
prv_get_system_update_id_for_props()). This crash is caused by an
|
||||||
|
invalid GVariantBuilder passed to g_variant_builder_end() in
|
||||||
|
prv_get_sleeping_for_props(), leading to a NULL result pointer being
|
||||||
|
passed to dls_async_task_complete(). A GVariant is attempted to be
|
||||||
|
constructed from this NULL pointer in dls_task_complete().
|
||||||
|
|
||||||
|
Here is the call chain that leads to the crash:
|
||||||
|
|
||||||
|
dls_device_get_all_props()
|
||||||
|
prv_get_system_update_id_for_props()
|
||||||
|
gupnp_service_proxy_begin_action("GetSystemUpdateID") -> prv_system_update_id_for_props_cb()
|
||||||
|
prv_system_update_id_for_props_cb()
|
||||||
|
prv_get_sr_token_for_props()
|
||||||
|
prv_get_sleeping_for_props()
|
||||||
|
dls_async_task_complete()
|
||||||
|
cb_data->cb() -> prv_async_task_complete()
|
||||||
|
prv_async_task_complete()
|
||||||
|
dls_task_complete()
|
||||||
|
g_variant_new()
|
||||||
|
|
||||||
|
The crash was most likely observed when a device running Plex Media
|
||||||
|
Server was present on the network.
|
||||||
|
|
||||||
|
This commit moves the call of g_variant_builder_end() in
|
||||||
|
prv_system_update_id_for_props_cb() (which invalidates the
|
||||||
|
GVariantBuilder used later in prv_get_sleeping_for_props()) to the
|
||||||
|
error handling branch. This leaves the GVariantBuilder alone and
|
||||||
|
allows prv_get_sr_token_for_props() or one of its descendants to call
|
||||||
|
g_variant_builder_end() and complete the task.
|
||||||
|
---
|
||||||
|
libdleyna/server/device.c | 5 ++---
|
||||||
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libdleyna/server/device.c b/libdleyna/server/device.c
|
||||||
|
index d77dfbc2725b..8777da0ea2db 100644
|
||||||
|
--- a/libdleyna/server/device.c
|
||||||
|
+++ b/libdleyna/server/device.c
|
||||||
|
@@ -2256,15 +2256,14 @@ static void prv_system_update_id_for_props_cb(GUPnPServiceProxy *proxy,
|
||||||
|
DLS_SYSTEM_UPDATE_VAR,
|
||||||
|
g_variant_new_uint32(id));
|
||||||
|
|
||||||
|
- cb_data->task.result = g_variant_ref_sink(g_variant_builder_end(
|
||||||
|
- cb_task_data->vb));
|
||||||
|
-
|
||||||
|
on_complete:
|
||||||
|
|
||||||
|
if (!cb_data->error)
|
||||||
|
prv_get_sr_token_for_props(proxy, cb_data->task.target.device,
|
||||||
|
cb_data);
|
||||||
|
else {
|
||||||
|
+ cb_data->task.result = g_variant_ref_sink(g_variant_builder_end(
|
||||||
|
+ cb_task_data->vb));
|
||||||
|
(void) g_idle_add(dls_async_task_complete, cb_data);
|
||||||
|
g_cancellable_disconnect(cb_data->cancellable,
|
||||||
|
cb_data->cancel_id);
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
||||||
@ -2,15 +2,18 @@
|
|||||||
|
|
||||||
Name: dleyna-server
|
Name: dleyna-server
|
||||||
Version: 0.6.0
|
Version: 0.6.0
|
||||||
Release: 4
|
Release: 5
|
||||||
Summary: APIs for discovering Digital Media Servers
|
Summary: APIs for discovering Digital Media Servers
|
||||||
License: LGPLv2
|
License: LGPLv2
|
||||||
URL: https://01.org/dleyna/
|
URL: https://01.org/dleyna/
|
||||||
Source0: https://01.org/sites/default/files/downloads/dleyna/dleyna-server-%{version}.tar_2.gz
|
Source0: https://01.org/sites/default/files/downloads/dleyna/dleyna-server-%{version}.tar_2.gz
|
||||||
|
Patch0: port-to-gupnp-1.2.patch
|
||||||
|
Patch1: dleyna-server-Avoid-possible-crash-when-getting-server-properties.patch
|
||||||
|
|
||||||
BuildRequires: autoconf automake libtool pkgconfig(dleyna-core-1.0) >= 0.5.0
|
BuildRequires: autoconf automake libtool pkgconfig(dleyna-core-1.0) >= 0.5.0
|
||||||
BuildRequires: pkgconfig(gio-2.0) >= 2.28 pkgconfig(glib-2.0) >= 2.28
|
BuildRequires: pkgconfig(gio-2.0) >= 2.28 pkgconfig(glib-2.0) >= 2.28
|
||||||
BuildRequires: pkgconfig(gobject-2.0) >= 2.28 pkgconfig(gssdp-1.0) >= 0.13.2
|
BuildRequires: pkgconfig(gobject-2.0) >= 2.28 pkgconfig(gssdp-1.2) >= 0.13.2
|
||||||
BuildRequires: pkgconfig(gupnp-1.0) >= 0.20.3 pkgconfig(gupnp-av-1.0) >= 0.11.5
|
BuildRequires: pkgconfig(gupnp-1.2) >= 0.20.3 pkgconfig(gupnp-av-1.0) >= 0.11.5
|
||||||
BuildRequires: pkgconfig(gupnp-dlna-2.0) >= 0.9.4 pkgconfig(libsoup-2.4) >= 2.28.2
|
BuildRequires: pkgconfig(gupnp-dlna-2.0) >= 0.9.4 pkgconfig(libsoup-2.4) >= 2.28.2
|
||||||
Requires: dbus dleyna-connector-dbus
|
Requires: dbus dleyna-connector-dbus
|
||||||
|
|
||||||
@ -40,5 +43,9 @@ sed --in-place --expression 's! -shared ! -Wl,--as-needed\0!g' libtool
|
|||||||
%exclude %{_libdir}/pkgconfig
|
%exclude %{_libdir}/pkgconfig
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jun 23 2021 Wenlong Ding <wenlong.ding@turbolinux.com.cn> - 0.6.0-5
|
||||||
|
- Port to gupnp 1.2
|
||||||
|
- Avoid crash when getting server properties
|
||||||
|
|
||||||
* Thu Apr 16 2020 chengzihan <chengzihan2@huawei.com> - 0.6.0-4
|
* Thu Apr 16 2020 chengzihan <chengzihan2@huawei.com> - 0.6.0-4
|
||||||
- Package init
|
- Package init
|
||||||
|
|||||||
68
port-to-gupnp-1.2.patch
Normal file
68
port-to-gupnp-1.2.patch
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
From 96c01c88363d6e5e9b7519bc4e8b5d86cf783e1f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Tojnar <jtojnar@gmail.com>
|
||||||
|
Date: Sat, 16 Mar 2019 05:46:20 +0100
|
||||||
|
Subject: [PATCH] Port to gupnp-1.2
|
||||||
|
|
||||||
|
gupnp_context_get_host_ip has been deprecated for a long time, as
|
||||||
|
the host-ip property moved to gssdp.
|
||||||
|
|
||||||
|
There is also a ton of new deprecations but I will address that separately.
|
||||||
|
---
|
||||||
|
configure.ac | 8 ++++----
|
||||||
|
libdleyna/server/upnp.c | 4 ++--
|
||||||
|
test/dbus/dms-info.c | 2 --
|
||||||
|
3 files changed, 6 insertions(+), 8 deletions(-)
|
||||||
|
mode change 100755 => 100644 libdleyna/server/upnp.c
|
||||||
|
mode change 100755 => 100644 test/dbus/dms-info.c
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 11879e7..61f4fca 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -36,10 +36,10 @@ LT_LANG([C])
|
||||||
|
|
||||||
|
# Checks for libraries.
|
||||||
|
PKG_PROG_PKG_CONFIG(0.16)
|
||||||
|
-PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.28])
|
||||||
|
-PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.28])
|
||||||
|
-PKG_CHECK_MODULES([GSSDP], [gssdp-1.0 >= 0.13.2])
|
||||||
|
-PKG_CHECK_MODULES([GUPNP], [gupnp-1.0 >= 0.20.3])
|
||||||
|
+PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.36])
|
||||||
|
+PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.36])
|
||||||
|
+PKG_CHECK_MODULES([GSSDP], [gssdp-1.2 >= 0.13.2])
|
||||||
|
+PKG_CHECK_MODULES([GUPNP], [gupnp-1.2 >= 0.20.3])
|
||||||
|
PKG_CHECK_MODULES([GUPNPAV], [gupnp-av-1.0 >= 0.11.5])
|
||||||
|
PKG_CHECK_MODULES([GUPNPDLNA], [gupnp-dlna-2.0 >= 0.9.4])
|
||||||
|
PKG_CHECK_MODULES([SOUP], [libsoup-2.4 >= 2.28.2])
|
||||||
|
diff --git a/libdleyna/server/upnp.c b/libdleyna/server/upnp.c
|
||||||
|
old mode 100755
|
||||||
|
new mode 100644
|
||||||
|
index 9913a76..d04efb8
|
||||||
|
--- a/libdleyna/server/upnp.c
|
||||||
|
+++ b/libdleyna/server/upnp.c
|
||||||
|
@@ -351,8 +351,8 @@ static void prv_device_unavailable_cb(GUPnPControlPoint *cp,
|
||||||
|
|
||||||
|
udn = gupnp_device_info_get_udn((GUPnPDeviceInfo *)proxy);
|
||||||
|
|
||||||
|
- ip_address = gupnp_context_get_host_ip(
|
||||||
|
- gupnp_control_point_get_context(cp));
|
||||||
|
+ ip_address = gssdp_client_get_host_ip(
|
||||||
|
+ GSSDP_CLIENT(gupnp_control_point_get_context(cp)));
|
||||||
|
|
||||||
|
if (!udn || !ip_address)
|
||||||
|
goto on_error;
|
||||||
|
diff --git a/test/dbus/dms-info.c b/test/dbus/dms-info.c
|
||||||
|
old mode 100755
|
||||||
|
new mode 100644
|
||||||
|
index a189b9f..4530e58
|
||||||
|
--- a/test/dbus/dms-info.c
|
||||||
|
+++ b/test/dbus/dms-info.c
|
||||||
|
@@ -360,8 +360,6 @@ int main(int argc, char *argv[])
|
||||||
|
if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
|
||||||
|
goto on_error;
|
||||||
|
|
||||||
|
- g_type_init();
|
||||||
|
-
|
||||||
|
/* Create proxy for com.intel.dLeynaServer.Manager. The Manager
|
||||||
|
object has no properties. We will create the proxy asynchronously
|
||||||
|
and use G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES to ensure that
|
||||||
Loading…
x
Reference in New Issue
Block a user