CSS parse->print->parse->print results in different print results
Found by AFL:
\0{min-width:0px
parse->print
{
min-width: 0;
}
parse->print
empty string
@otte are these interesting? Here's the code:
#include "config.h"
#undef GTK_DISABLE_DEPRECATED
#include <string.h>
#include <glib/gstdio.h>
#include <gtk/gtk.h>
#include <gio/gunixinputstream.h>
#include "testsuite/testutils.h"
static void
parsing_error_cb (GtkCssProvider *provider,
GtkCssSection *section,
const GError *error,
void *user_data)
{
}
int
main (int argc, char **argv)
{
gtk_test_init (&argc, &argv);
g_autoptr (GInputStream) stream = g_unix_input_stream_new (STDIN_FILENO, FALSE);
g_autoptr (GBytes) bytes = g_input_stream_read_bytes (stream, 100000, NULL, NULL);
g_assert_nonnull (bytes);
gsize size;
const char* data = g_bytes_get_data (bytes, &size);
if (data == NULL)
return 1;
g_autoptr (GString) string = g_string_new_len (data, size);
if (!g_str_is_ascii (string->str))
return 1;
g_autoptr (GtkCssProvider) provider = gtk_css_provider_new ();
g_signal_connect (provider, "parsing-error", G_CALLBACK (parsing_error_cb), NULL);
gtk_css_provider_load_from_data (provider, string->str, -1);
g_autofree const char *css = gtk_css_provider_to_string (provider);
g_print ("parsed successfully:\n%s\n", css);
g_autoptr (GtkCssProvider) provider_again = gtk_css_provider_new ();
g_signal_connect (provider_again, "parsing-error", G_CALLBACK (parsing_error_cb), NULL);
gtk_css_provider_load_from_data (provider_again, css, -1);
g_autofree const char *css_again = gtk_css_provider_to_string (provider_again);
g_print ("parsed again successfully:\n%s\n", css_again);
g_assert_cmpstr (css, ==, css_again);
g_print ("compared equal\n");
return 0;
}