Don't refuse to encode a single byte. (Milan Crha)
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=/branches/glib-2-14/; revision=5924
diff --git a/ChangeLog b/ChangeLog
index a003172..d979bcc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,15 @@
Merge from trunk:
+ * 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-24 Matthias Clasen <mclasen@redhat.com>
+
+ Merge from trunk:
+
* glib/goption.c: Use g_print to print out --help text in
locale encoding. (#469551, Takao Fujiwara)
diff --git a/glib/gbase64.c b/glib/gbase64.c
index f45df1e..437c4c9 100644
--- a/glib/gbase64.c
+++ b/glib/gbase64.c
@@ -217,7 +217,8 @@
* representation.
*
* Return value: a newly allocated, zero-terminated Base-64 encoded
- * string representing @data.
+ * string representing @data. The returned string must
+ * be freed with g_free().
*
* Since: 2.12
*/
@@ -230,16 +231,14 @@
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;
}
@@ -349,7 +348,8 @@
* Decode a sequence of Base-64 encoded text into binary data
*
* Return value: a newly allocated buffer containing the binary data
- * that @text represents
+ * that @text represents. The returned buffer must
+ * be freed with g_free().
*
* Since: 2.12
*/
diff --git a/tests/base64-test.c b/tests/base64-test.c
index 4cb7036..4d74721 100644
--- a/tests/base64-test.c
+++ b/tests/base64-test.c
@@ -83,24 +83,24 @@
}
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 @@
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 @@
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;
}