Resolves #1797726 bus_engine_proxy_new_internal() SIGTRAP
This commit is contained in:
		
							parent
							
								
									c9bb32a521
								
							
						
					
					
						commit
						d8723bd2ff
					
				| @ -1,6 +1,6 @@ | |||||||
| From 180ee9ce8d8f839db3e30803be5846c794416cbe Mon Sep 17 00:00:00 2001 | From 023d50db40912e4f7ee333543e05995a9c730bae Mon Sep 17 00:00:00 2001 | ||||||
| From: fujiwarat <takao.fujiwara1@gmail.com> | From: fujiwarat <takao.fujiwara1@gmail.com> | ||||||
| Date: Fri, 15 May 2020 19:17:03 +0900 | Date: Fri, 15 May 2020 21:44:16 +0900 | ||||||
| Subject: [PATCH] Fix SEGV in bus_panel_proxy_focus_in() | Subject: [PATCH] Fix SEGV in bus_panel_proxy_focus_in() | ||||||
| 
 | 
 | ||||||
| rhbz#1350291 SEGV in BUS_IS_CONNECTION(skip_connection) in | rhbz#1350291 SEGV in BUS_IS_CONNECTION(skip_connection) in | ||||||
| @ -41,12 +41,12 @@ BUG=rhbz#1767976 | |||||||
| BUG=rhbz#1797120 | BUG=rhbz#1797120 | ||||||
| ---
 | ---
 | ||||||
|  bus/dbusimpl.c         | 47 ++++++++++++++++++++++++--- |  bus/dbusimpl.c         | 47 ++++++++++++++++++++++++--- | ||||||
|  bus/engineproxy.c      | 11 ++++++- |  bus/engineproxy.c      | 51 ++++++++++++++++++++++------- | ||||||
|  client/x11/main.c      |  8 ++++- |  client/x11/main.c      |  8 ++++- | ||||||
|  src/ibusbus.c          |  5 +++ |  src/ibusbus.c          |  5 +++ | ||||||
|  ui/gtk3/extension.vala |  4 +++ |  ui/gtk3/extension.vala |  4 +++ | ||||||
|  ui/gtk3/switcher.vala  | 73 +++++++++++++++++++++++++----------------- |  ui/gtk3/switcher.vala  | 73 +++++++++++++++++++++++++----------------- | ||||||
|  6 files changed, 112 insertions(+), 36 deletions(-) |  6 files changed, 141 insertions(+), 47 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/bus/dbusimpl.c b/bus/dbusimpl.c
 | diff --git a/bus/dbusimpl.c b/bus/dbusimpl.c
 | ||||||
| index 59787a80..af2fbde2 100644
 | index 59787a80..af2fbde2 100644
 | ||||||
| @ -137,10 +137,10 @@ index 59787a80..af2fbde2 100644 | |||||||
|      if (incoming) { |      if (incoming) { | ||||||
|          /* is incoming message */ |          /* is incoming message */ | ||||||
| diff --git a/bus/engineproxy.c b/bus/engineproxy.c
 | diff --git a/bus/engineproxy.c b/bus/engineproxy.c
 | ||||||
| index 2d98995c..ec17900f 100644
 | index 2d98995c..bbbe5532 100644
 | ||||||
| --- a/bus/engineproxy.c
 | --- a/bus/engineproxy.c
 | ||||||
| +++ b/bus/engineproxy.c
 | +++ b/bus/engineproxy.c
 | ||||||
| @@ -660,11 +660,13 @@ bus_engine_proxy_g_signal (GDBusProxy  *proxy,
 | @@ -660,20 +660,33 @@ bus_engine_proxy_g_signal (GDBusProxy  *proxy,
 | ||||||
|      g_return_if_reached (); |      g_return_if_reached (); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -148,29 +148,44 @@ index 2d98995c..ec17900f 100644 | |||||||
|  static BusEngineProxy * |  static BusEngineProxy * | ||||||
|  bus_engine_proxy_new_internal (const gchar     *path, |  bus_engine_proxy_new_internal (const gchar     *path, | ||||||
|                                 IBusEngineDesc  *desc, |                                 IBusEngineDesc  *desc, | ||||||
|                                 GDBusConnection *connection) | -                               GDBusConnection *connection)
 | ||||||
|  | +                               GDBusConnection *connection,
 | ||||||
|  | +                               GError         **error)
 | ||||||
|  { |  { | ||||||
| +    GError *error = NULL;
 | +    GDBusProxyFlags flags;
 | ||||||
|  | +    BusEngineProxy *engine;
 | ||||||
|  | +
 | ||||||
|      g_assert (path); |      g_assert (path); | ||||||
|      g_assert (IBUS_IS_ENGINE_DESC (desc)); |      g_assert (IBUS_IS_ENGINE_DESC (desc)); | ||||||
|      g_assert (G_IS_DBUS_CONNECTION (connection)); |      g_assert (G_IS_DBUS_CONNECTION (connection)); | ||||||
| @@ -673,7 +675,7 @@ bus_engine_proxy_new_internal (const gchar     *path,
 | +    g_assert (error && *error == NULL);
 | ||||||
|      BusEngineProxy *engine = |   | ||||||
|  | -    GDBusProxyFlags flags = G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START;
 | ||||||
|  | -    BusEngineProxy *engine =
 | ||||||
|  | +    /* rhbz#1601577 engine == NULL if connection is closed. */
 | ||||||
|  | +    if (g_dbus_connection_is_closed (connection)) {
 | ||||||
|  | +        *error = g_error_new (G_DBUS_ERROR,
 | ||||||
|  | +                              G_DBUS_ERROR_FAILED,
 | ||||||
|  | +                              "Connection is closed.");
 | ||||||
|  | +        return NULL;
 | ||||||
|  | +    }
 | ||||||
|  | +    flags = G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START;
 | ||||||
|  | +    engine =
 | ||||||
|          (BusEngineProxy *) g_initable_new (BUS_TYPE_ENGINE_PROXY, |          (BusEngineProxy *) g_initable_new (BUS_TYPE_ENGINE_PROXY, | ||||||
|                                             NULL, |                                             NULL, | ||||||
| -                                           NULL,
 | -                                           NULL,
 | ||||||
| +                                           &error,
 | +                                           error,
 | ||||||
|                                             "desc",              desc, |                                             "desc",              desc, | ||||||
|                                             "g-connection",      connection, |                                             "g-connection",      connection, | ||||||
|                                             "g-interface-name",  IBUS_INTERFACE_ENGINE, |                                             "g-interface-name",  IBUS_INTERFACE_ENGINE, | ||||||
| @@ -681,12 +683,19 @@ bus_engine_proxy_new_internal (const gchar     *path,
 | @@ -681,12 +694,19 @@ bus_engine_proxy_new_internal (const gchar     *path,
 | ||||||
|                                             "g-default-timeout", g_gdbus_timeout, |                                             "g-default-timeout", g_gdbus_timeout, | ||||||
|                                             "g-flags",           flags, |                                             "g-flags",           flags, | ||||||
|                                             NULL); |                                             NULL); | ||||||
| +    /* FIXME: rhbz#1601577 */
 | +    /* FIXME: rhbz#1601577 */
 | ||||||
| +    if (error) {
 | +    if (!engine) {
 | ||||||
| +        /* show abrt local variable */
 | +        /* show abrt local variable */
 | ||||||
| +        gchar *message = g_strdup (error->message);
 | +        gchar *message = g_strdup ((*error)->message);
 | ||||||
| +        g_error ("%s", message);
 | +        g_error ("%s", message);
 | ||||||
| +    }
 | +    }
 | ||||||
|      const gchar *layout = ibus_engine_desc_get_layout (desc); |      const gchar *layout = ibus_engine_desc_get_layout (desc); | ||||||
| @ -183,6 +198,45 @@ index 2d98995c..ec17900f 100644 | |||||||
|   |   | ||||||
|  typedef struct { |  typedef struct { | ||||||
|      GTask           *task; |      GTask           *task; | ||||||
|  | @@ -748,23 +768,30 @@ create_engine_ready_cb (BusFactoryProxy    *factory,
 | ||||||
|  |                          GAsyncResult       *res, | ||||||
|  |                          EngineProxyNewData *data) | ||||||
|  |  { | ||||||
|  | +    GError *error = NULL;
 | ||||||
|  | +    gchar *path;
 | ||||||
|  | +    BusEngineProxy *engine;
 | ||||||
|  | +
 | ||||||
|  |      g_return_if_fail (data->task != NULL); | ||||||
|  |   | ||||||
|  | -    GError *error = NULL;
 | ||||||
|  | -    gchar *path = bus_factory_proxy_create_engine_finish (factory,
 | ||||||
|  | -                                                          res,
 | ||||||
|  | -                                                          &error);
 | ||||||
|  | +    path = bus_factory_proxy_create_engine_finish (factory, res, &error);
 | ||||||
|  |      if (path == NULL) { | ||||||
|  |          g_task_return_error (data->task, error); | ||||||
|  |          engine_proxy_new_data_free (data); | ||||||
|  |          return; | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | -    BusEngineProxy *engine =
 | ||||||
|  | -            bus_engine_proxy_new_internal (path,
 | ||||||
|  | -                                           data->desc,
 | ||||||
|  | -                                           g_dbus_proxy_get_connection ((GDBusProxy *)data->factory));
 | ||||||
|  | +    engine = bus_engine_proxy_new_internal (
 | ||||||
|  | +            path,
 | ||||||
|  | +            data->desc,
 | ||||||
|  | +            g_dbus_proxy_get_connection ((GDBusProxy *)data->factory),
 | ||||||
|  | +            &error);
 | ||||||
|  |      g_free (path); | ||||||
|  | +    if (!engine) {
 | ||||||
|  | +        g_task_return_error (data->task, error);
 | ||||||
|  | +        engine_proxy_new_data_free (data);
 | ||||||
|  | +        return;
 | ||||||
|  | +    }
 | ||||||
|  |   | ||||||
|  |      /* FIXME: set destroy callback ? */ | ||||||
|  |      g_task_return_pointer (data->task, engine, NULL); | ||||||
| diff --git a/client/x11/main.c b/client/x11/main.c
 | diff --git a/client/x11/main.c b/client/x11/main.c
 | ||||||
| index c9ee174d..768b91f0 100644
 | index c9ee174d..768b91f0 100644
 | ||||||
| --- a/client/x11/main.c
 | --- a/client/x11/main.c
 | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ | |||||||
| 
 | 
 | ||||||
| Name:           ibus | Name:           ibus | ||||||
| Version:        1.5.22 | Version:        1.5.22 | ||||||
| Release:        6%{?dist} | Release:        7%{?dist} | ||||||
| Summary:        Intelligent Input Bus for Linux OS | Summary:        Intelligent Input Bus for Linux OS | ||||||
| License:        LGPLv2+ | License:        LGPLv2+ | ||||||
| URL:            https://github.com/ibus/%name/wiki | URL:            https://github.com/ibus/%name/wiki | ||||||
| @ -463,6 +463,9 @@ dconf update || : | |||||||
| %{_datadir}/installed-tests/ibus | %{_datadir}/installed-tests/ibus | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Fri May 15 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-7 | ||||||
|  | - Resolves #1797726 bus_engine_proxy_new_internal() SIGTRAP | ||||||
|  | 
 | ||||||
| * Fri May 15 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-6 | * Fri May 15 2020 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.22-6 | ||||||
| - Update HEAD.patch to make parallel dict build | - Update HEAD.patch to make parallel dict build | ||||||
| - Update 1385349-segv-bus-proxy.patch | - Update 1385349-segv-bus-proxy.patch | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user