From: Matthias Clasen Date: Thu, 7 Aug 2003 21:51:38 +0000 (+0000) Subject: Add tests for '=' in names and values. X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=96838a7a8817165556cf1b09e7c34c36379b97c1;p=dana%2Fcg-glib.git Add tests for '=' in names and values. 2003-08-07 Matthias Clasen * tests/env-test.c: Add tests for '=' in names and values. * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a declaration for environ. (#119338) --- diff --git a/ChangeLog b/ChangeLog index 542f9ca4..1f564330 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2003-08-07 Matthias Clasen + * tests/env-test.c: Add tests for '=' in names and values. + + * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a + declaration for environ. (#119338) + * acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091) * tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 542f9ca4..1f564330 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,10 @@ 2003-08-07 Matthias Clasen + * tests/env-test.c: Add tests for '=' in names and values. + + * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a + declaration for environ. (#119338) + * acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091) * tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion. diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 542f9ca4..1f564330 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,5 +1,10 @@ 2003-08-07 Matthias Clasen + * tests/env-test.c: Add tests for '=' in names and values. + + * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a + declaration for environ. (#119338) + * acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091) * tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 542f9ca4..1f564330 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,5 +1,10 @@ 2003-08-07 Matthias Clasen + * tests/env-test.c: Add tests for '=' in names and values. + + * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a + declaration for environ. (#119338) + * acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091) * tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 542f9ca4..1f564330 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,5 +1,10 @@ 2003-08-07 Matthias Clasen + * tests/env-test.c: Add tests for '=' in names and values. + + * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a + declaration for environ. (#119338) + * acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091) * tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 542f9ca4..1f564330 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,10 @@ 2003-08-07 Matthias Clasen + * tests/env-test.c: Add tests for '=' in names and values. + + * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a + declaration for environ. (#119338) + * acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091) * tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion. diff --git a/glib/gutils.c b/glib/gutils.c index 1efd7542..18ef8280 100644 --- a/glib/gutils.c +++ b/glib/gutils.c @@ -697,7 +697,7 @@ g_getenv (const gchar *variable) /** * g_setenv: - * @variable: the environment variable to set. + * @variable: the environment variable to set, must not contain '='. * @value: the value for to set the variable to. * @overwrite: whether to change the variable if it already exists. * @@ -716,6 +716,7 @@ g_setenv (const gchar *variable, gboolean overwrite) { gint result; + g_return_val_if_fail (strchr (variable, '=') == NULL, FALSE); #ifdef HAVE_SETENV result = setenv (variable, value, overwrite); #else @@ -733,10 +734,17 @@ g_setenv (const gchar *variable, #endif return result == 0; } - + +#ifndef HAVE_UNSETENV +/* According to the Single Unix Specification, environ is not in + * any system header, although unistd.h often declares it. + */ +extern char **environ; +#endif + /** * g_unsetenv: - * @variable: the environment variable to remove. + * @variable: the environment variable to remove, must not contain '='. * * Removes an environment variable from the environment. * @@ -750,11 +758,15 @@ void g_unsetenv (const gchar *variable) { #ifdef HAVE_UNSETENV + g_return_if_fail (strchr (variable, '=') == NULL); + unsetenv (variable); #else int i, len; gchar **e, **f; - + + g_return_if_fail (strchr (variable, '=') == NULL); + len = strlen (variable); /* Mess directly with the environ array. diff --git a/tests/env-test.c b/tests/env-test.c index 178cf76c..2a343f29 100644 --- a/tests/env-test.c +++ b/tests/env-test.c @@ -34,6 +34,7 @@ #endif #include +#include #include #include @@ -42,6 +43,16 @@ #include #endif +static void +log (const gchar *log_domain, + GLogLevelFlags log_level, + const gchar *message, + gpointer user_data) +{ + /* Silence g_assert () and friends. + */ +} + int main (int argc, char *argv[]) { @@ -51,6 +62,8 @@ main (int argc, char *argv[]) gchar *value1 = "works"; gchar *value2 = "again"; + g_log_set_handler ("GLib", G_LOG_LEVEL_CRITICAL, log, NULL); + data = g_getenv (variable); g_assert (data == NULL && "TEST_G_SETENV already set"); @@ -81,5 +94,22 @@ main (int argc, char *argv[]) data = g_getenv (variable); g_assert (data == NULL && "g_unsetenv() doesn't work"); + result = g_setenv ("foo=bar", "baz", TRUE); + g_assert (!result && "g_setenv() accepts '=' in names"); + + result = g_setenv ("foo", "bar=baz", TRUE); + g_assert (result && "g_setenv() doesn't accept '=' in values"); + data = g_getenv ("foo=bar"); + g_assert (strcmp (data, "baz") == 0 && "g_getenv() doesn't support '=' in names"); + data = g_getenv ("foo"); + g_assert (strcmp (data, "bar=baz") == 0 && "g_getenv() doesn't support '=' in values"); + + g_unsetenv ("foo=bar"); + data = g_getenv ("foo"); + g_assert (data != NULL && "g_unsetenv() accepts '=' in names"); + g_unsetenv ("foo"); + data = g_getenv ("foo"); + g_assert (data == NULL && "g_unsetenv() doesn't support '=' in values"); + return 0; }