Don't refuse to encode a single byte. (Milan Crha)
authorMatthias Clasen <mclasen@redhat.com>
Fri, 23 Nov 2007 17:58:00 +0000 (17:58 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Fri, 23 Nov 2007 17:58:00 +0000 (17:58 +0000)
2007-11-23  Matthias Clasen  <mclasen@redhat.com>

        * glib/gbase64.c (g_base64_encode): Don't refuse to encode
        a single byte.  (Milan Crha)

        * tests/base64-test.c: Test encoding short strings.

svn path=/trunk/; revision=5919

ChangeLog
glib/gbase64.c
tests/base64-test.c

index 1567dea7bc1f12d1cf9f494b2c3fd5f650f81b85..ab51a35d6ebe11d2aa882bb9ec214ece4701a0d0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-11-23  Matthias Clasen  <mclasen@redhat.com>
+
+       * glib/gbase64.c (g_base64_encode): Don't refuse to encode
+       a single byte.  (Milan Crha)
+
+       * tests/base64-test.c: Test encoding short strings.
+
 2007-11-23  Matthias Clasen  <mclasen@redhat.com>
 
        * glib/gi18n-lib.h: 
index 344ce0b80a039a3201d21b1d05c4af414a90ed31..437c4c983898b28cd56d4e83dd1767f79bb5e238 100644 (file)
@@ -231,16 +231,14 @@ g_base64_encode (const guchar *data,
   gint save = 0;
 
   g_return_val_if_fail (data != NULL, NULL);
-  g_return_val_if_fail (len > 1, NULL);
+  g_return_val_if_fail (len > 0, NULL);
 
   /* We can use a smaller limit here, since we know the saved state is 0 */
   out = g_malloc (len * 4 / 3 + 4);
   outlen = g_base64_encode_step (data, len, FALSE, out, &state, &save);
-  outlen += g_base64_encode_close (FALSE,
-                                  out + outlen, 
-                                  &state, 
-                                  &save);
+  outlen += g_base64_encode_close (FALSE, out + outlen, &state, &save);
   out[outlen] = '\0';
+
   return (gchar *) out;
 }
 
index 4cb703693d32f0054634679e79320b15b7debf27..4d7472184f9ae6f4073d20d7c9aabeb5660654bb 100644 (file)
@@ -83,24 +83,24 @@ test_incremental (gboolean line_break,
 }
 
 static void
-test_full (void)
+test_full (gint length)
 {
   char *text;
   guchar *data2;
   gsize len;
 
-  text = g_base64_encode (data, DATA_SIZE);
+  text = g_base64_encode (data, length);
   data2 = g_base64_decode (text, &len);
   g_free (text);
 
-  if (len != DATA_SIZE)
+  if (len != length)
     {
       g_print ("Wrong decoded length: got %d, expected %d\n",
-              len, DATA_SIZE);
+              len, length);
       exit (1);
     }
 
-  if (memcmp (data, data2, DATA_SIZE) != 0)
+  if (memcmp (data, data2, length) != 0)
     {
       g_print ("Wrong decoded base64 data\n");
       exit (1);
@@ -116,7 +116,10 @@ main (int argc, char *argv[])
   for (i = 0; i < DATA_SIZE; i++)
     data[i] = (guchar)i;
 
-  test_full ();
+  test_full (DATA_SIZE);
+  test_full (1);
+  test_full (2);
+  test_full (3);
 
   test_incremental (FALSE, DATA_SIZE);
   test_incremental (TRUE, DATA_SIZE);
@@ -127,5 +130,9 @@ main (int argc, char *argv[])
   test_incremental (FALSE, DATA_SIZE - 2);
   test_incremental (TRUE, DATA_SIZE - 2);
 
+  test_incremental (FALSE, 1);
+  test_incremental (FALSE, 2);
+  test_incremental (FALSE, 3);
+
   return 0;
 }