[glib] GKeyFile: allow loading from empty strings
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] GKeyFile: allow loading from empty strings
- Date: Thu, 26 Jan 2012 19:41:08 +0000 (UTC)
commit 9bfde4a53fbc7c5596c65c790b76e61aae88860d
Author: Ryan Lortie <desrt desrt ca>
Date: Thu Jan 26 11:27:47 2012 -0500
GKeyFile: allow loading from empty strings
GKeyFile supports empty files and also supports loading from the string
"", but will fail with a critical if you try:
- explicit length == 0
- data == NULL
length == 0 should always be valid, and data == NULL should be valid in
the case that length == 0, so add some testcases for those and fix the
code up to allow them.
https://bugzilla.gnome.org/show_bug.cgi?id=668756
glib/gkeyfile.c | 5 ++---
glib/tests/keyfile.c | 27 ++++++++++++++++++++++++++-
2 files changed, 28 insertions(+), 4 deletions(-)
---
diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c
index 33b3c36..7b1f595 100644
--- a/glib/gkeyfile.c
+++ b/glib/gkeyfile.c
@@ -885,8 +885,7 @@ g_key_file_load_from_data (GKeyFile *key_file,
gchar list_separator;
g_return_val_if_fail (key_file != NULL, FALSE);
- g_return_val_if_fail (data != NULL, FALSE);
- g_return_val_if_fail (length != 0, FALSE);
+ g_return_val_if_fail (data != NULL || length == 0, FALSE);
if (length == (gsize)-1)
length = strlen (data);
@@ -1354,7 +1353,7 @@ g_key_file_parse_data (GKeyFile *key_file,
gsize i;
g_return_if_fail (key_file != NULL);
- g_return_if_fail (data != NULL);
+ g_return_if_fail (data != NULL || length == 0);
parse_error = NULL;
diff --git a/glib/tests/keyfile.c b/glib/tests/keyfile.c
index 9f40236..b06a1c0 100644
--- a/glib/tests/keyfile.c
+++ b/glib/tests/keyfile.c
@@ -1455,6 +1455,31 @@ test_list_separator (void)
g_key_file_unref (keyfile);
}
+static void
+test_empty_string (void)
+{
+ GError *error = NULL;
+ GKeyFile *kf;
+
+ kf = g_key_file_new ();
+
+ g_key_file_load_from_data (kf, "", 0, 0, &error);
+ g_assert_no_error (error);
+
+ g_key_file_load_from_data (kf, "", -1, 0, &error);
+ g_assert_no_error (error);
+
+ /* NULL is a fine pointer to use if length is zero */
+ g_key_file_load_from_data (kf, NULL, 0, 0, &error);
+ g_assert_no_error (error);
+
+ /* should not attempt to access non-NULL pointer if length is zero */
+ g_key_file_load_from_data (kf, GINT_TO_POINTER (1), 0, 0, &error);
+ g_assert_no_error (error);
+
+ g_key_file_unref (kf);
+}
+
int
main (int argc, char *argv[])
{
@@ -1489,7 +1514,7 @@ main (int argc, char *argv[])
g_test_add_func ("/keyfile/ref", test_ref);
g_test_add_func ("/keyfile/replace-value", test_replace_value);
g_test_add_func ("/keyfile/list-separator", test_list_separator);
-
+ g_test_add_func ("/keyfile/empty-string", test_empty_string);
return g_test_run ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]