diff mbox series

[V2,2/2] epiphany: Do not bypass initialization of variable with __attribute__((cleanup))

Message ID 20190510222653.41487-1-raj.khem@gmail.com
State Accepted
Commit 19e4c1f63abc82cf5f8d1eaac28d8fd5d09bf9d3
Headers show
Series None | expand

Commit Message

Khem Raj May 10, 2019, 10:26 p.m. UTC
This is reported with clang e.g.
../../../../../../../workspace/sources/epiphany/lib/ephy-web-app-utils.c:391:5: error: cannot jump from this goto statement to its label
    goto out;
    ^
../../../../../../../workspace/sources/epiphany/lib/ephy-web-app-utils.c:398:20: note: jump bypasses initialization of variable with __attribute__((cleanup))
  g_autofree char *app_file = g_build_filename (profile_dir, ".app", NULL);
                   ^
../../../../../../../workspace/sources/epiphany/lib/ephy-web-app-utils.c:385:5: error: cannot jump from this goto statement to its label
    goto out;
    ^
../../../../../../../workspace/sources/epiphany/lib/ephy-web-app-utils.c:398:20: note: jump bypasses initialization of variable with __attribute__((cleanup))                                                                                                                     g_autofree char *app_file = g_build_filename (profile_dir, ".app", NULL);
                   ^

Ensure that the initialization is deterministic for goto to work reliably

Signed-off-by: Khem Raj <raj.khem@gmail.com>

---
v2: Backport a patch instead of doing own

 .../epiphany/epiphany_3.32.1.2.bb             |  1 +
 ...Clean-up-ephy_web_application_create.patch | 79 +++++++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 meta/recipes-gnome/epiphany/files/0001-web-app-utils-Clean-up-ephy_web_application_create.patch

-- 
2.21.0

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Comments

Khem Raj May 14, 2019, 3:23 a.m. UTC | #1
ping^1

On Fri, May 10, 2019 at 6:27 PM Khem Raj <raj.khem@gmail.com> wrote:
>

> This is reported with clang e.g.

> ../../../../../../../workspace/sources/epiphany/lib/ephy-web-app-utils.c:391:5: error: cannot jump from this goto statement to its label

>     goto out;

>     ^

> ../../../../../../../workspace/sources/epiphany/lib/ephy-web-app-utils.c:398:20: note: jump bypasses initialization of variable with __attribute__((cleanup))

>   g_autofree char *app_file = g_build_filename (profile_dir, ".app", NULL);

>                    ^

> ../../../../../../../workspace/sources/epiphany/lib/ephy-web-app-utils.c:385:5: error: cannot jump from this goto statement to its label

>     goto out;

>     ^

> ../../../../../../../workspace/sources/epiphany/lib/ephy-web-app-utils.c:398:20: note: jump bypasses initialization of variable with __attribute__((cleanup))                                                                                                                     g_autofree char *app_file = g_build_filename (profile_dir, ".app", NULL);

>                    ^

>

> Ensure that the initialization is deterministic for goto to work reliably

>

> Signed-off-by: Khem Raj <raj.khem@gmail.com>

> ---

> v2: Backport a patch instead of doing own

>

>  .../epiphany/epiphany_3.32.1.2.bb             |  1 +

>  ...Clean-up-ephy_web_application_create.patch | 79 +++++++++++++++++++

>  2 files changed, 80 insertions(+)

>  create mode 100644 meta/recipes-gnome/epiphany/files/0001-web-app-utils-Clean-up-ephy_web_application_create.patch

>

> diff --git a/meta/recipes-gnome/epiphany/epiphany_3.32.1.2.bb b/meta/recipes-gnome/epiphany/epiphany_3.32.1.2.bb

> index ba2e851bb6..49631d92d7 100644

> --- a/meta/recipes-gnome/epiphany/epiphany_3.32.1.2.bb

> +++ b/meta/recipes-gnome/epiphany/epiphany_3.32.1.2.bb

> @@ -12,6 +12,7 @@ REQUIRED_DISTRO_FEATURES = "x11 opengl"

>

>  SRC_URI = "${GNOME_MIRROR}/${GNOMEBN}/${@gnome_verdir("${PV}")}/${GNOMEBN}-${PV}.tar.${GNOME_COMPRESS_TYPE};name=archive \

>             file://0002-help-meson.build-disable-the-use-of-yelp.patch \

> +           file://0001-web-app-utils-Clean-up-ephy_web_application_create.patch \

>             "

>  SRC_URI[archive.md5sum] = "93faec353e9f62519859e6164350fd5d"

>  SRC_URI[archive.sha256sum] = "a8284fb9bbc8b7914a154a8eac1598c8b59ae421e0d685146fb48198427926be"

> diff --git a/meta/recipes-gnome/epiphany/files/0001-web-app-utils-Clean-up-ephy_web_application_create.patch b/meta/recipes-gnome/epiphany/files/0001-web-app-utils-Clean-up-ephy_web_application_create.patch

> new file mode 100644

> index 0000000000..ea644fb985

> --- /dev/null

> +++ b/meta/recipes-gnome/epiphany/files/0001-web-app-utils-Clean-up-ephy_web_application_create.patch

> @@ -0,0 +1,79 @@

> +From 49f435217873e679b142f64d3e7def919fb642bb Mon Sep 17 00:00:00 2001

> +From: Michael Catanzaro <mcatanzaro@igalia.com>

> +Date: Wed, 8 May 2019 15:58:32 +0000

> +Subject: [PATCH] web-app-utils: Clean up ephy_web_application_create()

> +

> +Fixes #764

> +

> +(cherry picked from commit 4e998d45e4cc549a7ca561a33895b0fbcf7ba6bb)

> +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/epiphany/commit/a6a022c9c498ad5dcf7f2220644a7520df74ca31]

> +

> +Signed-off-by: Khem Raj <raj.khem@gmail.com>

> +---

> + lib/ephy-web-app-utils.c | 24 ++++++++++--------------

> + 1 file changed, 10 insertions(+), 14 deletions(-)

> +

> +diff --git a/lib/ephy-web-app-utils.c b/lib/ephy-web-app-utils.c

> +index 97f3f24..fc68a96 100644

> +--- a/lib/ephy-web-app-utils.c

> ++++ b/lib/ephy-web-app-utils.c

> +@@ -374,46 +374,42 @@ ephy_web_application_create (const char *id,

> +                              const char *name,

> +                              GdkPixbuf  *icon)

> + {

> +-  char *profile_dir;

> +-  char *desktop_file_path = NULL;

> ++  g_autofree char *app_file = NULL;

> ++  g_autofree char *profile_dir = NULL;

> ++  g_autofree char *desktop_file_path = NULL;

> +

> +   /* If there's already a WebApp profile for the contents of this

> +    * view, do nothing. */

> +   profile_dir = ephy_web_application_get_profile_directory (id);

> +   if (g_file_test (profile_dir, G_FILE_TEST_IS_DIR)) {

> +     g_warning ("Profile directory %s already exists", profile_dir);

> +-    goto out;

> ++    return NULL;

> +   }

> +

> +   /* Create the profile directory, populate it. */

> +   if (g_mkdir_with_parents (profile_dir, 488) == -1) {

> +     g_warning ("Failed to create directory %s", profile_dir);

> +-    goto out;

> ++    return NULL;

> +   }

> +

> +   /* Skip migration for new web apps. */

> +   ephy_profile_utils_set_migration_version_for_profile_dir (EPHY_PROFILE_MIGRATION_VERSION, profile_dir);

> +

> +   /* Create an .app file. */

> +-  g_autofree char *app_file = g_build_filename (profile_dir, ".app", NULL);

> ++  app_file = g_build_filename (profile_dir, ".app", NULL);

> +   int fd = g_open (app_file, O_WRONLY|O_CREAT|O_TRUNC, 0644);

> +   if (fd < 0) {

> +-    LOG ("Failed to create .app file: %s", g_strerror (errno));

> +-    goto out;

> +-  } else {

> +-    close (fd);

> ++    g_warning ("Failed to create .app file: %s", g_strerror (errno));

> ++    return NULL;

> +   }

> ++  close (fd);

> +

> +   /* Create the deskop file. */

> +   desktop_file_path = create_desktop_file (id, name, address, profile_dir, icon);

> +   if (desktop_file_path)

> +     ephy_web_application_initialize_settings (profile_dir);

> +

> +- out:

> +-  if (profile_dir)

> +-    g_free (profile_dir);

> +-

> +-  return desktop_file_path;

> ++  return g_steal_pointer (&desktop_file_path);

> + }

> +

> + char *

> +--

> +2.21.0

> +

> --

> 2.21.0

>

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
diff mbox series

Patch

diff --git a/meta/recipes-gnome/epiphany/epiphany_3.32.1.2.bb b/meta/recipes-gnome/epiphany/epiphany_3.32.1.2.bb
index ba2e851bb6..49631d92d7 100644
--- a/meta/recipes-gnome/epiphany/epiphany_3.32.1.2.bb
+++ b/meta/recipes-gnome/epiphany/epiphany_3.32.1.2.bb
@@ -12,6 +12,7 @@  REQUIRED_DISTRO_FEATURES = "x11 opengl"
 
 SRC_URI = "${GNOME_MIRROR}/${GNOMEBN}/${@gnome_verdir("${PV}")}/${GNOMEBN}-${PV}.tar.${GNOME_COMPRESS_TYPE};name=archive \
            file://0002-help-meson.build-disable-the-use-of-yelp.patch \
+           file://0001-web-app-utils-Clean-up-ephy_web_application_create.patch \
            "
 SRC_URI[archive.md5sum] = "93faec353e9f62519859e6164350fd5d"
 SRC_URI[archive.sha256sum] = "a8284fb9bbc8b7914a154a8eac1598c8b59ae421e0d685146fb48198427926be"
diff --git a/meta/recipes-gnome/epiphany/files/0001-web-app-utils-Clean-up-ephy_web_application_create.patch b/meta/recipes-gnome/epiphany/files/0001-web-app-utils-Clean-up-ephy_web_application_create.patch
new file mode 100644
index 0000000000..ea644fb985
--- /dev/null
+++ b/meta/recipes-gnome/epiphany/files/0001-web-app-utils-Clean-up-ephy_web_application_create.patch
@@ -0,0 +1,79 @@ 
+From 49f435217873e679b142f64d3e7def919fb642bb Mon Sep 17 00:00:00 2001
+From: Michael Catanzaro <mcatanzaro@igalia.com>
+Date: Wed, 8 May 2019 15:58:32 +0000
+Subject: [PATCH] web-app-utils: Clean up ephy_web_application_create()
+
+Fixes #764
+
+(cherry picked from commit 4e998d45e4cc549a7ca561a33895b0fbcf7ba6bb)
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/epiphany/commit/a6a022c9c498ad5dcf7f2220644a7520df74ca31]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/ephy-web-app-utils.c | 24 ++++++++++--------------
+ 1 file changed, 10 insertions(+), 14 deletions(-)
+
+diff --git a/lib/ephy-web-app-utils.c b/lib/ephy-web-app-utils.c
+index 97f3f24..fc68a96 100644
+--- a/lib/ephy-web-app-utils.c
++++ b/lib/ephy-web-app-utils.c
+@@ -374,46 +374,42 @@ ephy_web_application_create (const char *id,
+                              const char *name,
+                              GdkPixbuf  *icon)
+ {
+-  char *profile_dir;
+-  char *desktop_file_path = NULL;
++  g_autofree char *app_file = NULL;
++  g_autofree char *profile_dir = NULL;
++  g_autofree char *desktop_file_path = NULL;
+ 
+   /* If there's already a WebApp profile for the contents of this
+    * view, do nothing. */
+   profile_dir = ephy_web_application_get_profile_directory (id);
+   if (g_file_test (profile_dir, G_FILE_TEST_IS_DIR)) {
+     g_warning ("Profile directory %s already exists", profile_dir);
+-    goto out;
++    return NULL;
+   }
+ 
+   /* Create the profile directory, populate it. */
+   if (g_mkdir_with_parents (profile_dir, 488) == -1) {
+     g_warning ("Failed to create directory %s", profile_dir);
+-    goto out;
++    return NULL;
+   }
+ 
+   /* Skip migration for new web apps. */
+   ephy_profile_utils_set_migration_version_for_profile_dir (EPHY_PROFILE_MIGRATION_VERSION, profile_dir);
+ 
+   /* Create an .app file. */
+-  g_autofree char *app_file = g_build_filename (profile_dir, ".app", NULL);
++  app_file = g_build_filename (profile_dir, ".app", NULL);
+   int fd = g_open (app_file, O_WRONLY|O_CREAT|O_TRUNC, 0644);
+   if (fd < 0) {
+-    LOG ("Failed to create .app file: %s", g_strerror (errno));
+-    goto out;
+-  } else {
+-    close (fd);
++    g_warning ("Failed to create .app file: %s", g_strerror (errno));
++    return NULL;
+   }
++  close (fd);
+ 
+   /* Create the deskop file. */
+   desktop_file_path = create_desktop_file (id, name, address, profile_dir, icon);
+   if (desktop_file_path)
+     ephy_web_application_initialize_settings (profile_dir);
+ 
+- out:
+-  if (profile_dir)
+-    g_free (profile_dir);
+-
+-  return desktop_file_path;
++  return g_steal_pointer (&desktop_file_path);
+ }
+ 
+ char *
+-- 
+2.21.0
+