MIME type subclass check should guard against small strings
authormcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 27 Jun 2018 15:07:10 +0000 (15:07 +0000)
committermcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 27 Jun 2018 15:07:10 +0000 (15:07 +0000)
https://bugs.webkit.org/show_bug.cgi?id=186977

Reviewed by Carlos Garcia Campos.

Sadly, this code is duplicated between two different files because it is not good.

* xdgmime/README.webkit:
* xdgmime/src/xdgmime.c:
(ends_with):
(xdg_mime_is_super_type):
* xdgmime/src/xdgmimecache.c:
(ends_with):
(is_super_type):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233255 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/ThirdParty/ChangeLog
Source/ThirdParty/xdgmime/README.webkit
Source/ThirdParty/xdgmime/src/xdgmime.c
Source/ThirdParty/xdgmime/src/xdgmimecache.c

index d66f151..2ad9f66 100644 (file)
@@ -1,3 +1,20 @@
+2018-06-27  Michael Catanzaro  <mcatanzaro@igalia.com>
+
+        MIME type subclass check should guard against small strings
+        https://bugs.webkit.org/show_bug.cgi?id=186977
+
+        Reviewed by Carlos Garcia Campos.
+
+        Sadly, this code is duplicated between two different files because it is not good.
+
+        * xdgmime/README.webkit:
+        * xdgmime/src/xdgmime.c:
+        (ends_with):
+        (xdg_mime_is_super_type):
+        * xdgmime/src/xdgmimecache.c:
+        (ends_with):
+        (is_super_type):
+
 2018-06-22  Michael Catanzaro  <mcatanzaro@igalia.com>
 
         [WPE][GTK] Update xdgmime
index ef50f7a..401eb57 100644 (file)
@@ -17,3 +17,4 @@ Changes included from GLib sources:
 
  - 2542b6f60492fadfb21f2c4a29976c3494c7e6c5 xdgmime: Handle EINTR in open()
  - 83d34f630939aa13539e03895bef87da738c4127 Don't forget to free resources in an early return
+ - be7f40185fb2ce884112c1f8a4b196ea65350466 xdgmime: Fix an invalid read
index a8d7541..307a667 100644 (file)
@@ -741,19 +741,28 @@ xdg_mime_media_type_equal (const char *mime_a,
 
 #if 1
 static int
-xdg_mime_is_super_type (const char *mime)
+ends_with (const char *str,
+           const char *suffix)
 {
   int length;
-  const char *type;
+  int suffix_length;
 
-  length = strlen (mime);
-  type = &(mime[length - 2]);
+  length = strlen (str);
+  suffix_length = strlen (suffix);
+  if (length < suffix_length)
+    return 0;
 
-  if (strcmp (type, "/*") == 0)
+  if (strcmp (str + length - suffix_length, suffix) == 0)
     return 1;
 
   return 0;
 }
+
+static int
+xdg_mime_is_super_type (const char *mime)
+{
+  return ends_with (mime, "/*");
+}
 #endif
 
 int
index 076d679..9600b90 100644 (file)
@@ -817,19 +817,28 @@ _xdg_mime_cache_get_mime_types_from_file_name (const char *file_name,
 
 #if 1
 static int
-is_super_type (const char *mime)
+ends_with (const char *str,
+           const char *suffix)
 {
   int length;
-  const char *type;
+  int suffix_length;
 
-  length = strlen (mime);
-  type = &(mime[length - 2]);
+  length = strlen (str);
+  suffix_length = strlen (suffix);
+  if (length < suffix_length)
+    return 0;
 
-  if (strcmp (type, "/*") == 0)
+  if (strcmp (str + length - suffix_length, suffix) == 0)
     return 1;
 
   return 0;
 }
+
+static int
+is_super_type (const char *mime)
+{
+  return ends_with (mime, "/*");
+}
 #endif
 
 int