gio/tests/contenttype: Call g_content_type_guess() with valid data len

g_content_type_guess() requires specifying a valid data length. Fixes a
segfault when running the test.

Also add an explicit check for this and return XDG_MIME_TYPE_UNKNOWN when
data_size is specified as -1, to avoid crashing.

https://bugzilla.gnome.org/show_bug.cgi?id=674452
This commit is contained in:
Martin Pitt 2012-06-27 09:25:37 +02:00
parent 95f29687e1
commit 139c1ce988
2 changed files with 10 additions and 2 deletions

View File

@ -330,6 +330,10 @@ g_content_type_guess (const gchar *filename,
if (result_uncertain)
*result_uncertain = FALSE;
/* our test suite and potentially other code used -1 in the past, which is
* not documented and not allowed; guard against that */
g_return_val_if_fail (data_size != (gsize) -1, g_strdup (XDG_MIME_TYPE_UNKNOWN));
if (filename)
{
basename = g_path_get_basename (filename);
@ -906,6 +910,10 @@ g_content_type_guess (const gchar *filename,
if (result_uncertain)
*result_uncertain = FALSE;
/* our test suite and potentially other code used -1 in the past, which is
* not documented and not allowed; guard against that */
g_return_val_if_fail (data_size != (gsize) -1, g_strdup (XDG_MIME_TYPE_UNKNOWN));
G_LOCK (gio_xdgmime);
if (filename)

View File

@ -55,14 +55,14 @@ test_guess (void)
g_free (res);
g_free (expected);
res = g_content_type_guess ("test.pot", (guchar *)"ABC abc", -1, &uncertain);
res = g_content_type_guess ("test.pot", (guchar *)"ABC abc", 7, &uncertain);
expected = g_content_type_from_mime_type ("application/vnd.ms-powerpoint");
g_assert (g_content_type_equals (expected, res));
g_assert (uncertain);
g_free (res);
g_free (expected);
res = g_content_type_guess ("test.otf", (guchar *)"OTTO", -1, &uncertain);
res = g_content_type_guess ("test.otf", (guchar *)"OTTO", 4, &uncertain);
expected = g_content_type_from_mime_type ("application/x-font-otf");
g_assert (g_content_type_equals (expected, res));
g_assert (!uncertain);