From f3177151c61c31a8e2b7a16a8f661b6f4ef1d128 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 16 Apr 2008 16:59:28 +0000 Subject: [PATCH] Avoid possible memory corruption in xdgmime, fd.o bug 12512, reported by 2008-04-16 Matthias Clasen Avoid possible memory corruption in xdgmime, fd.o bug 12512, reported by Joe Shaw and Federico Mena Quintero. * xdgmime.c(_xdg_mime_media_type_equal): Implement. (xdg_mime_media_type_equal): Turn into a wrapper around the _-prefixed version. * xdgmimecache.c: Use the _-prefixed versions of comparison functions throughout. svn path=/trunk/; revision=20009 --- gtk/xdgmime/ChangeLog | 12 ++++++++++++ gtk/xdgmime/xdgmime.c | 15 +++++++++++---- gtk/xdgmime/xdgmimecache.c | 4 ++-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/gtk/xdgmime/ChangeLog b/gtk/xdgmime/ChangeLog index cdff403cff..d1c2775ac8 100644 --- a/gtk/xdgmime/ChangeLog +++ b/gtk/xdgmime/ChangeLog @@ -1,3 +1,15 @@ +2008-04-16 Matthias Clasen + + Avoid possible memory corruption in xdgmime, fd.o bug 12512, + reported by Joe Shaw and Federico Mena Quintero. + + * xdgmime.c(_xdg_mime_media_type_equal): Implement. + (xdg_mime_media_type_equal): Turn into a wrapper around the + _-prefixed version. + + * xdgmimecache.c: Use the _-prefixed versions of + comparison functions throughout. + 2008-02-16 Matthias Clasen * === Released 2.13.0 === diff --git a/gtk/xdgmime/xdgmime.c b/gtk/xdgmime/xdgmime.c index 1d2007cb78..d344b586da 100644 --- a/gtk/xdgmime/xdgmime.c +++ b/gtk/xdgmime/xdgmime.c @@ -670,13 +670,11 @@ xdg_mime_mime_type_equal (const char *mime_a, } int -xdg_mime_media_type_equal (const char *mime_a, - const char *mime_b) +_xdg_mime_media_type_equal (const char *mime_a, + const char *mime_b) { char *sep; - xdg_mime_init (); - sep = strchr (mime_a, '/'); if (sep && strncmp (mime_a, mime_b, sep - mime_a + 1) == 0) @@ -685,6 +683,15 @@ xdg_mime_media_type_equal (const char *mime_a, return 0; } +int +xdg_mime_media_type_equal (const char *mime_a, + const char *mime_b) +{ + xdg_mime_init (); + + return _xdg_mime_media_type_equal (mime_a, mime_b); +} + #if 1 static int xdg_mime_is_super_type (const char *mime) diff --git a/gtk/xdgmime/xdgmimecache.c b/gtk/xdgmime/xdgmimecache.c index 8804eab51f..e4773133d8 100644 --- a/gtk/xdgmime/xdgmimecache.c +++ b/gtk/xdgmime/xdgmimecache.c @@ -297,7 +297,7 @@ cache_magic_lookup_data (XdgMimeCache *cache, for (n = 0; n < n_mime_types; n++) { if (mime_types[n] && - xdg_mime_mime_type_equal (mime_types[n], non_match)) + _xdg_mime_mime_type_equal (mime_types[n], non_match)) mime_types[n] = NULL; } } @@ -783,7 +783,7 @@ _xdg_mime_cache_mime_type_subclass (const char *mime, #if 1 /* Handle supertypes */ if (is_super_type (ubase) && - xdg_mime_media_type_equal (umime, ubase)) + _xdg_mime_media_type_equal (umime, ubase)) return 1; #endif