Add tests for '=' in names and values.

2003-08-07  Matthias Clasen  <maclas@gmx.de>

	* 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)
This commit is contained in:
Matthias Clasen 2003-08-07 21:51:38 +00:00 committed by Matthias Clasen
parent 4d2921959e
commit 96838a7a88
8 changed files with 76 additions and 4 deletions

View File

@ -1,5 +1,10 @@
2003-08-07 Matthias Clasen <maclas@gmx.de>
* 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.

View File

@ -1,5 +1,10 @@
2003-08-07 Matthias Clasen <maclas@gmx.de>
* 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.

View File

@ -1,5 +1,10 @@
2003-08-07 Matthias Clasen <maclas@gmx.de>
* 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.

View File

@ -1,5 +1,10 @@
2003-08-07 Matthias Clasen <maclas@gmx.de>
* 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.

View File

@ -1,5 +1,10 @@
2003-08-07 Matthias Clasen <maclas@gmx.de>
* 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.

View File

@ -1,5 +1,10 @@
2003-08-07 Matthias Clasen <maclas@gmx.de>
* 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.

View File

@ -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.

View File

@ -34,6 +34,7 @@
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
@ -42,6 +43,16 @@
#include <unistd.h>
#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;
}