Merge branch 'giochannel-check' into 'master'

giochannel: Fix length_size bounds check

Closes #2323

See merge request GNOME/glib!1931
diff --git a/glib/giochannel.c b/glib/giochannel.c
index 4c5e081..e93c4b4 100644
--- a/glib/giochannel.c
+++ b/glib/giochannel.c
@@ -899,13 +899,13 @@
     {
       /* FIXME: We’re constrained by line_term_len being a guint here */
       gsize length_size = strlen (line_term);
-      g_return_if_fail (length_size > G_MAXUINT);
+      g_return_if_fail (length_size <= G_MAXUINT);
       length_unsigned = (guint) length_size;
     }
 
   g_free (channel->line_term);
   channel->line_term = line_term ? g_memdup2 (line_term, length_unsigned) : NULL;
-  channel->line_term_len = length;
+  channel->line_term_len = length_unsigned;
 }
 
 /**
diff --git a/glib/tests/io-channel.c b/glib/tests/io-channel.c
index ff53fce..4a1b108 100644
--- a/glib/tests/io-channel.c
+++ b/glib/tests/io-channel.c
@@ -49,8 +49,10 @@
   channel = g_io_channel_new_file (filename, "r", &local_error);
   g_assert_no_error (local_error);
 
-  /* Only break on newline characters, not nuls. */
-  g_io_channel_set_line_term (channel, "\n", 1);
+  /* Only break on newline characters, not nuls.
+   * Use length -1 here to exercise glib#2323; the case where length > 0
+   * is covered in glib/tests/protocol.c. */
+  g_io_channel_set_line_term (channel, "\n", -1);
   g_io_channel_set_encoding (channel, NULL, &local_error);
   g_assert_no_error (local_error);