[epiphany/mcatanzaro/more-web-app-fixes: 3/3] web-app-utils: fix crash when app name contains spaces or hyphens




commit 1c80c0e6ebb6780393ef43fc9bbcaecdf175ab5a
Author: Michael Catanzaro <mcatanzaro redhat com>
Date:   Thu Dec 16 08:05:21 2021 -0600

    web-app-utils: fix crash when app name contains spaces or hyphens
    
    This is a regression from !1032. I incorrectly assumed that web app
    names cannot contain hyphens. That's bogus.
    
    Part-of: <https://gitlab.gnome.org/GNOME/epiphany/-/merge_requests/1046>

 lib/ephy-web-app-utils.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)
---
diff --git a/lib/ephy-web-app-utils.c b/lib/ephy-web-app-utils.c
index 7b50f5a73..dd2291833 100644
--- a/lib/ephy-web-app-utils.c
+++ b/lib/ephy-web-app-utils.c
@@ -105,8 +105,9 @@ get_app_id_from_gapplication_id (const char *name)
 static char *
 get_gapplication_id_from_id (const char *id)
 {
-  g_auto (GStrv) split = NULL;
   g_autofree char *gapplication_id = NULL;
+  const char *final_hyphen;
+  const char *checksum;
 
   /* FIXME: Ideally we would convert hyphens to underscores here, because
    * hyphens are not very friendly to D-Bus. However, changing this
@@ -122,9 +123,15 @@ get_gapplication_id_from_id (const char *id)
     return g_steal_pointer (&gapplication_id);
 
   /* Split ID into: <normalized-name>-<checksum> */
-  split = g_strsplit (id, "-", -1);
-  if (g_strv_length (split) != 2) {
-    g_warning ("Web app ID %s is broken: must have two hyphens", id);
+  final_hyphen = strrchr (id, '-');
+  if (!final_hyphen) {
+    g_warning ("Web app ID %s is broken: must contain a hyphen", id);
+    return NULL;
+  }
+  checksum = final_hyphen + 1;
+
+  if (*checksum == '\0') {
+    g_warning ("Web app ID %s is broken: should end with checksum, not hyphen", id);
     return NULL;
   }
 
@@ -134,7 +141,7 @@ get_gapplication_id_from_id (const char *id)
    * existing web apps.
    */
   g_clear_pointer (&gapplication_id, g_free);
-  gapplication_id = g_strconcat (EPHY_WEB_APP_GAPPLICATION_ID_PREFIX, split[1], NULL);
+  gapplication_id = g_strconcat (EPHY_WEB_APP_GAPPLICATION_ID_PREFIX, checksum, NULL);
 
   if (!g_application_id_is_valid (gapplication_id)) {
     g_warning ("Web app ID %s is broken: derived GApplication ID %s is not a valid app ID (is the final 
component alphanumeric?)", id, gapplication_id);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]