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> | ||||
| 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() | ||||
| 
 | ||||
| rhbz#1350291 SEGV in BUS_IS_CONNECTION(skip_connection) in | ||||
| @ -41,12 +41,12 @@ BUG=rhbz#1767976 | ||||
| BUG=rhbz#1797120 | ||||
| ---
 | ||||
|  bus/dbusimpl.c         | 47 ++++++++++++++++++++++++--- | ||||
|  bus/engineproxy.c      | 11 ++++++- | ||||
|  bus/engineproxy.c      | 51 ++++++++++++++++++++++------- | ||||
|  client/x11/main.c      |  8 ++++- | ||||
|  src/ibusbus.c          |  5 +++ | ||||
|  ui/gtk3/extension.vala |  4 +++ | ||||
|  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
 | ||||
| index 59787a80..af2fbde2 100644
 | ||||
| @ -137,10 +137,10 @@ index 59787a80..af2fbde2 100644 | ||||
|      if (incoming) { | ||||
|          /* is incoming message */ | ||||
| diff --git a/bus/engineproxy.c b/bus/engineproxy.c
 | ||||
| index 2d98995c..ec17900f 100644
 | ||||
| index 2d98995c..bbbe5532 100644
 | ||||
| --- a/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 (); | ||||
|  } | ||||
|   | ||||
| @ -148,29 +148,44 @@ index 2d98995c..ec17900f 100644 | ||||
|  static BusEngineProxy * | ||||
|  bus_engine_proxy_new_internal (const gchar     *path, | ||||
|                                 IBusEngineDesc  *desc, | ||||
|                                 GDBusConnection *connection) | ||||
| -                               GDBusConnection *connection)
 | ||||
| +                               GDBusConnection *connection,
 | ||||
| +                               GError         **error)
 | ||||
|  { | ||||
| +    GError *error = NULL;
 | ||||
| +    GDBusProxyFlags flags;
 | ||||
| +    BusEngineProxy *engine;
 | ||||
| +
 | ||||
|      g_assert (path); | ||||
|      g_assert (IBUS_IS_ENGINE_DESC (desc)); | ||||
|      g_assert (G_IS_DBUS_CONNECTION (connection)); | ||||
| @@ -673,7 +675,7 @@ bus_engine_proxy_new_internal (const gchar     *path,
 | ||||
|      BusEngineProxy *engine = | ||||
| +    g_assert (error && *error == NULL);
 | ||||
|   | ||||
| -    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, | ||||
|                                             NULL, | ||||
| -                                           NULL,
 | ||||
| +                                           &error,
 | ||||
| +                                           error,
 | ||||
|                                             "desc",              desc, | ||||
|                                             "g-connection",      connection, | ||||
|                                             "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-flags",           flags, | ||||
|                                             NULL); | ||||
| +    /* FIXME: rhbz#1601577 */
 | ||||
| +    if (error) {
 | ||||
| +    if (!engine) {
 | ||||
| +        /* show abrt local variable */
 | ||||
| +        gchar *message = g_strdup (error->message);
 | ||||
| +        gchar *message = g_strdup ((*error)->message);
 | ||||
| +        g_error ("%s", message);
 | ||||
| +    }
 | ||||
|      const gchar *layout = ibus_engine_desc_get_layout (desc); | ||||
| @ -183,6 +198,45 @@ index 2d98995c..ec17900f 100644 | ||||
|   | ||||
|  typedef struct { | ||||
|      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
 | ||||
| index c9ee174d..768b91f0 100644
 | ||||
| --- a/client/x11/main.c
 | ||||
|  | ||||
| @ -35,7 +35,7 @@ | ||||
| 
 | ||||
| Name:           ibus | ||||
| Version:        1.5.22 | ||||
| Release:        6%{?dist} | ||||
| Release:        7%{?dist} | ||||
| Summary:        Intelligent Input Bus for Linux OS | ||||
| License:        LGPLv2+ | ||||
| URL:            https://github.com/ibus/%name/wiki | ||||
| @ -463,6 +463,9 @@ dconf update || : | ||||
| %{_datadir}/installed-tests/ibus | ||||
| 
 | ||||
| %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 | ||||
| - Update HEAD.patch to make parallel dict build | ||||
| - Update 1385349-segv-bus-proxy.patch | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user