Package: release.debian.org Severity: normal User: release.debian.org@packages.debian.org Usertags: freeze-exception Please unblock glib2.0 for squeeze. glib2.0 (2.24.2-1) unstable; urgency=low * Drop type-handling usage. Closes: #587863. * Bump standards version accordingly. * Ship gio-querymodules in a versioned directory. * Run it on installation, not only when triggered. * Purge the modules cache in the postrm. * New upstream bugfix release. + Works around the race condition in gtester that causes random FTBFSes. Note that I’m not sure of the last changelog entry, since the powerpc build failed :/ I’m attaching the diff for source files. Cheers, -- .''`. Josselin Mouette : :' : `. `' “If you behave this way because you are blackmailed by someone, `- […] I will see what I can do for you.” -- Jörg Schilling
--- glib-2.24.1/gio/gconverteroutputstream.c 2010-04-13 13:33:15.000000000 +0000 +++ glib-2.24.2/gio/gconverteroutputstream.c 2010-08-08 14:47:15.000000000 +0000 @@ -418,12 +418,16 @@ converted_bytes = 0; while (!priv->finished && converted_bytes < to_convert_size) { + /* Ensure we have *some* target space */ + if (buffer_tailspace (&priv->converted_buffer) == 0) + grow_buffer (&priv->converted_buffer); + /* Try to convert to our buffer */ my_error = NULL; res = g_converter_convert (priv->converter, to_convert + converted_bytes, to_convert_size - converted_bytes, - buffer_data (&priv->converted_buffer), + buffer_data (&priv->converted_buffer) + buffer_available (&priv->converted_buffer), buffer_tailspace (&priv->converted_buffer), 0, &bytes_read, @@ -529,12 +533,16 @@ flushed = FALSE; while (!priv->finished && !flushed) { + /* Ensure we have *some* target space */ + if (buffer_tailspace (&priv->converted_buffer) == 0) + grow_buffer (&priv->converted_buffer); + /* Try to convert to our buffer */ my_error = NULL; res = g_converter_convert (priv->converter, buffer_data (&priv->output_buffer), buffer_available (&priv->output_buffer), - buffer_data (&priv->converted_buffer), + buffer_data (&priv->converted_buffer) + buffer_available (&priv->converted_buffer), buffer_tailspace (&priv->converted_buffer), is_closing ? G_CONVERTER_INPUT_AT_END : G_CONVERTER_FLUSH, &bytes_read, --- glib-2.24.1/gio/tests/converter-stream.c 2010-04-13 13:33:16.000000000 +0000 +++ glib-2.24.2/gio/tests/converter-stream.c 2010-08-08 14:47:15.000000000 +0000 @@ -558,6 +558,59 @@ g_object_unref (compressor); } +#define DATA_LENGTH 1000000 + +static void +test_corruption (void) +{ + GError *error = NULL; + guint32 *data0, *data1; + gsize data1_size; + gint i; + GInputStream *istream0, *istream1, *cistream1; + GOutputStream *ostream1, *ostream2, *costream1; + GConverter *compressor, *decompressor; + + data0 = g_malloc (DATA_LENGTH * sizeof (guint32)); + for (i = 0; i < DATA_LENGTH; i++) + data0[i] = g_random_int (); + + istream0 = g_memory_input_stream_new_from_data (data0, + DATA_LENGTH * sizeof (guint32), NULL); + + ostream1 = g_memory_output_stream_new (NULL, 0, g_realloc, NULL); + compressor = G_CONVERTER (g_zlib_compressor_new ( + G_ZLIB_COMPRESSOR_FORMAT_GZIP, -1)); + costream1 = g_converter_output_stream_new (ostream1, compressor); + + g_output_stream_splice (costream1, istream0, 0, NULL, &error); + g_assert_no_error (error); + + g_object_unref (costream1); + g_object_unref (compressor); + data1 = g_memory_output_stream_get_data (G_MEMORY_OUTPUT_STREAM (ostream1)); + data1_size = g_memory_output_stream_get_data_size ( + G_MEMORY_OUTPUT_STREAM (ostream1)); + g_object_unref (ostream1); + g_object_unref (istream0); + + istream1 = g_memory_input_stream_new_from_data (data1, data1_size, NULL); + decompressor = G_CONVERTER (g_zlib_decompressor_new ( + G_ZLIB_COMPRESSOR_FORMAT_GZIP)); + cistream1 = g_converter_input_stream_new (istream1, decompressor); + + ostream2 = g_memory_output_stream_new (NULL, 0, g_realloc, NULL); + + g_output_stream_splice (ostream2, cistream1, 0, NULL, &error); + g_assert_no_error (error); + + g_assert_cmpuint (DATA_LENGTH * sizeof (guint32), ==, + g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (ostream2))); + g_assert (memcmp (data0, g_memory_output_stream_get_data ( + G_MEMORY_OUTPUT_STREAM (ostream2)), DATA_LENGTH * sizeof (guint32)) == 0); +} + + int main (int argc, char *argv[]) @@ -567,6 +620,7 @@ g_test_add_func ("/converter-input-stream/expander", test_expander); g_test_add_func ("/converter-input-stream/compressor", test_compressor); + g_test_add_func ("/converter-output-stream/corruption", test_corruption); return g_test_run(); } --- glib-2.24.1/glib/gtester.c 2010-04-13 13:33:16.000000000 +0000 +++ glib-2.24.2/glib/gtester.c 2010-08-08 16:13:52.000000000 +0000 @@ -620,12 +620,21 @@ *argc_p = e; } +static gboolean +do_nothing (gpointer data) +{ + return TRUE; +} + int main (int argc, char **argv) { guint ui; + /* See #578295 */ + g_timeout_add_seconds (5, do_nothing, NULL); + /* some unices need SA_RESTART for SIGCHLD to return -EAGAIN for io. * we must fiddle with sigaction() *before* glib is used, otherwise * we could revoke signal hanmdler setups from glib initialization code. --- glib-2.24.1/glib/gutils.c 2010-04-13 13:33:16.000000000 +0000 +++ glib-2.24.2/glib/gutils.c 2010-08-08 14:47:15.000000000 +0000 @@ -3086,9 +3086,12 @@ * by Windows and the Microsoft C runtime (in the "English_United * States" format) translated into the Unixish format. */ - retval = g_win32_getlocale (); - if ((retval != NULL) && (retval[0] != '\0')) + { + char *locale = g_win32_getlocale (); + retval = g_intern_string (locale); + g_free (locale); return retval; + } #endif return NULL; --- glib-2.24.1/glib/gvariant.c 2010-05-03 00:42:45.000000000 +0000 +++ glib-2.24.2/glib/gvariant.c 2010-08-08 14:47:15.000000000 +0000 @@ -2619,14 +2619,10 @@ * * Ends the builder process and returns the constructed value. * - * This call automatically reduces the reference count on @builder by - * one, unless it has previously had g_variant_builder_no_autofree() - * called on it. Unless you've taken other actions, this is usually - * sufficient to free @builder. - * - * Even if additional references are held, it is not permissible to use - * @builder in any way after this call except for further reference - * counting operations. + * It is not permissible to use @builder in any way after this call + * except for reference counting operations (in the case of a + * heap-allocated #GVariantBuilder) or by reinitialising it with + * g_variant_builder_init() (in the case of stack-allocated). * * It is an error to call this function in any way that would create an * inconsistent value to be constructed (ie: insufficient number of
Attachment:
signature.asc
Description: This is a digitally signed message part