From: Richard M. Stallman Date: Thu, 8 Aug 1996 20:04:18 +0000 (+0000) Subject: (set_time_zone_rule): Don't put a string literal X-Git-Tag: emacs-19.34~21 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1155c45365ff4f15aa75e717233e880bc88d969d;p=emacs.git (set_time_zone_rule): Don't put a string literal "TZ=..." in environ. --- diff --git a/src/editfns.c b/src/editfns.c index 7e9a798c4e2..f705b34cbd0 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -936,6 +936,17 @@ If TZ is nil, use implementation-defined default time zone information.") return Qnil; } +/* These two values are known to load tz files in buggy implementations. + Their values shouldn't matter in non-buggy implementations. + We don't use string literals for these strings, + since if a string in the environment is in readonly + storage, it runs afoul of bugs in SVR4 and Solaris 2.3. + See Sun bugs 1113095 and 1114114, ``Timezone routines + improperly modify environment''. */ + +static char set_time_zone_rule_tz1[] = "TZ=GMT0"; +static char set_time_zone_rule_tz2[] = "TZ=GMT1"; + /* Set the local time zone rule to TZSTRING. This allocates memory into `environ', which it is the caller's responsibility to free. */ @@ -986,17 +997,13 @@ set_time_zone_rule (tzstring) not load a tz file, tzset can dump core (see Sun bug#1225179). The following code works around these bugs. */ - /* These two values are known to load tz files in buggy implementations. - Their values shouldn't matter in non-buggy implementations. */ - char *tz1 = "TZ=GMT0"; - char *tz2 = "TZ=GMT1"; - if (tzstring) { /* Temporarily set TZ to a value that loads a tz file and that differs from tzstring. */ char *tz = *newenv; - *newenv = strcmp (tzstring, tz1 + 3) == 0 ? tz2 : tz1; + *newenv = (strcmp (tzstring, set_time_zone_rule_tz1 + 3) == 0 + ? set_time_zone_rule_tz2 : set_time_zone_rule_tz1); tzset (); *newenv = tz; } @@ -1004,10 +1011,10 @@ set_time_zone_rule (tzstring) { /* The implied tzstring is unknown, so temporarily set TZ to two different values that each load a tz file. */ - *to = tz1; + *to = set_time_zone_rule_tz1; to[1] = 0; tzset (); - *to = tz2; + *to = set_time_zone_rule_tz2; tzset (); *to = 0; }