svn commit: r200191 - head/lib/libc/stdlib

Sean Farley scf at FreeBSD.org
Sun Dec 6 23:27:25 UTC 2009


Author: scf
Date: Sun Dec  6 23:27:24 2009
New Revision: 200191
URL: http://svn.freebsd.org/changeset/base/200191

Log:
  Change the behavior of setenv(), putenv() and unsetenv() to continue parsing
  instead of returning an error if a corrupt (not a "name=value" string) entry
  in the environ array is detected when (re)-building the internal
  environment.  This should prevent applications or libraries from
  experiencing issues arising from the expectation that these calls will
  complete even with corrupt entries.  The behavior is now as it was prior to
  7.0.
  
  Reviewed by:	jilles
  MFC after:	1 week

Modified:
  head/lib/libc/stdlib/getenv.c

Modified: head/lib/libc/stdlib/getenv.c
==============================================================================
--- head/lib/libc/stdlib/getenv.c	Sun Dec  6 23:05:17 2009	(r200190)
+++ head/lib/libc/stdlib/getenv.c	Sun Dec  6 23:27:24 2009	(r200191)
@@ -361,8 +361,7 @@ __build_env(void)
 		} else {
 			__env_warnx(CorruptEnvValueMsg, envVars[envNdx].name,
 			    strlen(envVars[envNdx].name));
-			errno = EFAULT;
-			goto Failure;
+			continue;
 		}
 
 		/*
@@ -377,8 +376,7 @@ __build_env(void)
 		    false) == NULL) {
 			__env_warnx(CorruptEnvFindMsg, envVars[envNdx].name,
 			    nameLen);
-			errno = EFAULT;
-			goto Failure;
+			continue;
 		}
 		envVars[activeNdx].active = true;
 	}
@@ -560,8 +558,7 @@ __merge_environ(void)
 				if ((equals = strchr(*env, '=')) == NULL) {
 					__env_warnx(CorruptEnvValueMsg, *env,
 					    strlen(*env));
-					errno = EFAULT;
-					return (-1);
+					continue;
 				}
 				if (__setenv(*env, equals - *env, equals + 1,
 				    1) == -1)


More information about the svn-src-head mailing list