Jason Edmeades : msvcrt: Do not put cmd.exe special environment variables into the environ.

Alexandre Julliard julliard at winehq.org
Sun Mar 3 13:21:25 CST 2019


Module: wine
Branch: oldstable
Commit: a73948bb40f219fb01fd9a8b5c5d5976debd8f17
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a73948bb40f219fb01fd9a8b5c5d5976debd8f17

Author: Jason Edmeades <us at edmeades.me.uk>
Date:   Tue Sep 25 08:39:59 2018 +0100

msvcrt: Do not put cmd.exe special environment variables into the environ.

All the special environment variables from the command shell which
track directory use are stripped out from the C runtime
environ/wenviron.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45320
Signed-off-by: Jason Edmeades <us at edmeades.me.uk>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 0dcfc97fcbea15037d15dd1021870de25b8382df)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/msvcrt/data.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcrt/data.c b/dlls/msvcrt/data.c
index 06e16a8..f08d9b1 100644
--- a/dlls/msvcrt/data.c
+++ b/dlls/msvcrt/data.c
@@ -73,7 +73,8 @@ char ** msvcrt_SnapshotOfEnvironmentA(char **blk)
 
   for (ptr = environ_strings; *ptr; ptr += strlen(ptr) + 1)
   {
-    count++;
+    /* Don't count environment variables starting with '=' which are command shell specific */
+    if (*ptr != '=') count++;
     len += strlen(ptr) + 1;
   }
   if (blk)
@@ -88,7 +89,8 @@ char ** msvcrt_SnapshotOfEnvironmentA(char **blk)
 	  memcpy(&blk[count],environ_strings,len);
 	  for (ptr = (char*) &blk[count]; *ptr; ptr += strlen(ptr) + 1)
 	    {
-	      blk[i++] = ptr;
+	      /* Skip special environment strings set by the command shell */
+	      if (*ptr != '=') blk[i++] = ptr;
 	    }
 	}
       blk[i] = NULL;
@@ -105,7 +107,8 @@ MSVCRT_wchar_t ** msvcrt_SnapshotOfEnvironmentW(MSVCRT_wchar_t **wblk)
 
   for (wptr = wenviron_strings; *wptr; wptr += strlenW(wptr) + 1)
   {
-    count++;
+    /* Don't count environment variables starting with '=' which are command shell specific */
+    if (*wptr != '=') count++;
     len += strlenW(wptr) + 1;
   }
   if (wblk)
@@ -119,7 +122,8 @@ MSVCRT_wchar_t ** msvcrt_SnapshotOfEnvironmentW(MSVCRT_wchar_t **wblk)
 	  memcpy(&wblk[count],wenviron_strings,len * sizeof(MSVCRT_wchar_t));
 	  for (wptr = (MSVCRT_wchar_t*)&wblk[count]; *wptr; wptr += strlenW(wptr) + 1)
 	    {
-	      wblk[i++] = wptr;
+	      /* Skip special environment strings set by the command shell */
+	      if (*wptr != '=') wblk[i++] = wptr;
 	    }
 	}
       wblk[i] = NULL;




More information about the wine-cvs mailing list