Changeset 3634 for trunk/src/kWorker/kWorker.c
- Timestamp:
- Nov 2, 2024, 2:51:30 AM (9 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kWorker/kWorker.c
r3522 r3634 892 892 KSIZE cEnvVarsAllocated; 893 893 /** The _environ msvcrt variable. */ 894 char **environ ;894 char **environC; 895 895 /** The _wenviron msvcrt variable. */ 896 wchar_t **wenviron ;896 wchar_t **wenvironC; 897 897 /** The shadow _environ msvcrt variable. */ 898 898 char **papszEnvVars; … … 2764 2764 for (iEntry = 0; iEntry < cEntries; iEntry++) 2765 2765 { 2766 KUPTRoffIndex = (KUPTR)paEntries[iEntry].AddressOfIndex - (KUPTR)pMod->u.Manual.pbLoad;2767 KUPTRoffCallbacks = (KUPTR)paEntries[iEntry].AddressOfCallBacks - (KUPTR)pMod->u.Manual.pbLoad;2768 KUPTR const *puCallbacks = (KUPTR const *)&pbImg[offCallbacks];2766 offIndex = (KUPTR)paEntries[iEntry].AddressOfIndex - (KUPTR)pMod->u.Manual.pbLoad; 2767 offCallbacks = (KUPTR)paEntries[iEntry].AddressOfCallBacks - (KUPTR)pMod->u.Manual.pbLoad; 2768 puCallbacks = (KUPTR const *)&pbImg[offCallbacks]; 2769 2769 KWLDR_LOG(("TLS DIR #%u: %#x-%#x idx=@%#x (%#x) callbacks=@%#x (%#x) cbZero=%#x flags=%#x\n", 2770 2770 iEntry, paEntries[iEntry].StartAddressOfRawData, paEntries[iEntry].EndAddressOfRawData, … … 4621 4621 *pargc = g_Sandbox.cArgs; 4622 4622 *pargv = g_Sandbox.papszArgs; 4623 *penvp = g_Sandbox.environ ;4623 *penvp = g_Sandbox.environC; 4624 4624 4625 4625 /** @todo startinfo points at a newmode (setmode) value. */ … … 4635 4635 *pargc = g_Sandbox.cArgs; 4636 4636 *pargv = g_Sandbox.papwszArgs; 4637 *penvp = g_Sandbox.wenviron ;4637 *penvp = g_Sandbox.wenvironC; 4638 4638 4639 4639 /** @todo startinfo points at a newmode (setmode) value. */ … … 4990 4990 4991 4991 /** 4992 * Grows the environment vectors (KWSANDBOX::environ , KWSANDBOX::papszEnvVars,4993 * KWSANDBOX::wenviron , and KWSANDBOX::papwszEnvVars).4992 * Grows the environment vectors (KWSANDBOX::environC, KWSANDBOX::papszEnvVars, 4993 * KWSANDBOX::wenvironC, and KWSANDBOX::papwszEnvVars). 4994 4994 * 4995 4995 * @returns 0 on success, non-zero on failure. … … 5005 5005 cNew += 256; 5006 5006 5007 pvNew = kHlpRealloc(pSandbox->environ , cNew * sizeof(pSandbox->environ[0]));5007 pvNew = kHlpRealloc(pSandbox->environC, cNew * sizeof(pSandbox->environC[0])); 5008 5008 if (pvNew) 5009 5009 { 5010 pSandbox->environ = (char **)pvNew;5011 pSandbox->environ [cOld] = NULL;5010 pSandbox->environC = (char **)pvNew; 5011 pSandbox->environC[cOld] = NULL; 5012 5012 5013 5013 pvNew = kHlpRealloc(pSandbox->papszEnvVars, cNew * sizeof(pSandbox->papszEnvVars[0])); … … 5017 5017 pSandbox->papszEnvVars[cOld] = NULL; 5018 5018 5019 pvNew = kHlpRealloc(pSandbox->wenviron , cNew * sizeof(pSandbox->wenviron[0]));5019 pvNew = kHlpRealloc(pSandbox->wenvironC, cNew * sizeof(pSandbox->wenvironC[0])); 5020 5020 if (pvNew) 5021 5021 { 5022 pSandbox->wenviron = (wchar_t **)pvNew;5023 pSandbox->wenviron [cOld] = NULL;5022 pSandbox->wenvironC = (wchar_t **)pvNew; 5023 pSandbox->wenvironC[cOld] = NULL; 5024 5024 5025 5025 pvNew = kHlpRealloc(pSandbox->papwszEnvVars, cNew * sizeof(pSandbox->papwszEnvVars[0])); … … 5031 5031 pSandbox->cEnvVarsAllocated = cNew; 5032 5032 KW_LOG(("kwSandboxGrowEnv: cNew=%d - crt: %p / %p; shadow: %p, %p\n", 5033 cNew, pSandbox->environ , pSandbox->wenviron, pSandbox->papszEnvVars, pSandbox->papwszEnvVars));5033 cNew, pSandbox->environC, pSandbox->wenvironC, pSandbox->papszEnvVars, pSandbox->papwszEnvVars)); 5034 5034 return 0; 5035 5035 } … … 5084 5084 kHlpFree(pSandbox->papszEnvVars[iVar]); 5085 5085 pSandbox->papszEnvVars[iVar] = pszNew; 5086 pSandbox->environ [iVar]= pszNew;5086 pSandbox->environC[iVar] = pszNew; 5087 5087 5088 5088 kHlpFree(pSandbox->papwszEnvVars[iVar]); 5089 5089 pSandbox->papwszEnvVars[iVar] = pwszNew; 5090 pSandbox->wenviron [iVar]= pwszNew;5090 pSandbox->wenvironC[iVar] = pwszNew; 5091 5091 return 0; 5092 5092 } … … 5103 5103 pSandbox->papszEnvVars[iVar + 1] = NULL; 5104 5104 pSandbox->papszEnvVars[iVar] = pszNew; 5105 pSandbox->environ [iVar + 1]= NULL;5106 pSandbox->environ [iVar]= pszNew;5105 pSandbox->environC[iVar + 1] = NULL; 5106 pSandbox->environC[iVar] = pszNew; 5107 5107 5108 5108 pSandbox->papwszEnvVars[iVar + 1] = NULL; 5109 5109 pSandbox->papwszEnvVars[iVar] = pwszNew; 5110 pSandbox->wenviron [iVar + 1]= NULL;5111 pSandbox->wenviron [iVar]= pwszNew;5110 pSandbox->wenvironC[iVar + 1] = NULL; 5111 pSandbox->wenvironC[iVar] = pwszNew; 5112 5112 return 0; 5113 5113 } … … 5164 5164 kHlpFree(pSandbox->papszEnvVars[iVar]); 5165 5165 pSandbox->papszEnvVars[iVar] = pszNew; 5166 pSandbox->environ [iVar]= pszNew;5166 pSandbox->environC[iVar] = pszNew; 5167 5167 5168 5168 kHlpFree(pSandbox->papwszEnvVars[iVar]); 5169 5169 pSandbox->papwszEnvVars[iVar] = pwszNew; 5170 pSandbox->wenviron [iVar]= pwszNew;5170 pSandbox->wenvironC[iVar] = pwszNew; 5171 5171 return 0; 5172 5172 } … … 5183 5183 pSandbox->papszEnvVars[iVar + 1] = NULL; 5184 5184 pSandbox->papszEnvVars[iVar] = pszNew; 5185 pSandbox->environ [iVar + 1]= NULL;5186 pSandbox->environ [iVar]= pszNew;5185 pSandbox->environC[iVar + 1] = NULL; 5186 pSandbox->environC[iVar] = pszNew; 5187 5187 5188 5188 pSandbox->papwszEnvVars[iVar + 1] = NULL; 5189 5189 pSandbox->papwszEnvVars[iVar] = pwszNew; 5190 pSandbox->wenviron [iVar + 1]= NULL;5191 pSandbox->wenviron [iVar]= pwszNew;5190 pSandbox->wenvironC[iVar + 1] = NULL; 5191 pSandbox->wenvironC[iVar] = pwszNew; 5192 5192 return 0; 5193 5193 } … … 5224 5224 kHlpFree(pSandbox->papszEnvVars[iVar]); 5225 5225 pSandbox->papszEnvVars[iVar] = pSandbox->papszEnvVars[cVars]; 5226 pSandbox->environ [iVar]= pSandbox->papszEnvVars[cVars];5226 pSandbox->environC[iVar] = pSandbox->papszEnvVars[cVars]; 5227 5227 pSandbox->papszEnvVars[cVars] = NULL; 5228 pSandbox->environ [cVars]= NULL;5228 pSandbox->environC[cVars] = NULL; 5229 5229 5230 5230 kHlpFree(pSandbox->papwszEnvVars[iVar]); 5231 5231 pSandbox->papwszEnvVars[iVar] = pSandbox->papwszEnvVars[cVars]; 5232 pSandbox->wenviron [iVar]= pSandbox->papwszEnvVars[cVars];5232 pSandbox->wenvironC[iVar] = pSandbox->papwszEnvVars[cVars]; 5233 5233 pSandbox->papwszEnvVars[cVars] = NULL; 5234 pSandbox->wenviron [cVars]= NULL;5234 pSandbox->wenvironC[cVars] = NULL; 5235 5235 return 0; 5236 5236 } … … 5263 5263 kHlpFree(pSandbox->papszEnvVars[iVar]); 5264 5264 pSandbox->papszEnvVars[iVar] = pSandbox->papszEnvVars[cVars]; 5265 pSandbox->environ [iVar]= pSandbox->papszEnvVars[cVars];5265 pSandbox->environC[iVar] = pSandbox->papszEnvVars[cVars]; 5266 5266 pSandbox->papszEnvVars[cVars] = NULL; 5267 pSandbox->environ [cVars]= NULL;5267 pSandbox->environC[cVars] = NULL; 5268 5268 5269 5269 kHlpFree(pSandbox->papwszEnvVars[iVar]); 5270 5270 pSandbox->papwszEnvVars[iVar] = pSandbox->papwszEnvVars[cVars]; 5271 pSandbox->wenviron [iVar]= pSandbox->papwszEnvVars[cVars];5271 pSandbox->wenvironC[iVar] = pSandbox->papwszEnvVars[cVars]; 5272 5272 pSandbox->papwszEnvVars[cVars] = NULL; 5273 pSandbox->wenviron [cVars]= NULL;5273 pSandbox->wenvironC[cVars] = NULL; 5274 5274 return 0; 5275 5275 } … … 5552 5552 KW_LOG(("__p__environ\n")); 5553 5553 kHlpAssert(GetCurrentThreadId() == g_Sandbox.idMainThread); 5554 return &g_Sandbox.environ ;5554 return &g_Sandbox.environC; 5555 5555 } 5556 5556 … … 5561 5561 KW_LOG(("__p__wenviron\n")); 5562 5562 kHlpAssert(GetCurrentThreadId() == g_Sandbox.idMainThread); 5563 return &g_Sandbox.wenviron ;5563 return &g_Sandbox.wenvironC; 5564 5564 } 5565 5565 … … 5571 5571 KWFS_TODO(); /** @todo check the callers expectations! */ 5572 5572 kHlpAssert(GetCurrentThreadId() == g_Sandbox.idMainThread); 5573 *ppapszEnviron = g_Sandbox.environ ;5573 *ppapszEnviron = g_Sandbox.environC; 5574 5574 return 0; 5575 5575 } … … 5582 5582 KWFS_TODO(); /** @todo check the callers expectations! */ 5583 5583 kHlpAssert(GetCurrentThreadId() == g_Sandbox.idMainThread); 5584 *ppapwszEnviron = g_Sandbox.wenviron ;5584 *ppapwszEnviron = g_Sandbox.wenvironC; 5585 5585 return 0; 5586 5586 } … … 6332 6332 //static int s_cDbgGets = 0; 6333 6333 KU32 cchProc = (KU32)kHlpStrLen(pszProc); 6334 KU32i = g_cSandboxGetProcReplacements;6334 i = g_cSandboxGetProcReplacements; 6335 6335 while (i-- > 0) 6336 6336 if ( g_aSandboxGetProcReplacements[i].cchFunction == cchProc … … 6350 6350 if (pMod->iCrtSlot == KU8_MAX) 6351 6351 { 6352 intrc = kwLdrModuleCreateCrtSlot(pMod);6352 rc = kwLdrModuleCreateCrtSlot(pMod); 6353 6353 if (rc) 6354 6354 { … … 6372 6372 if (kHlpStrComp(pszProc, g_szInvokeCompilePassW) == 0) 6373 6373 { 6374 KU32 i;6375 6374 for (i = 0; i < K_ELEMENTS(g_aCxInterceptorEntries); i++) 6376 6375 if ((KUPTR)g_aCxInterceptorEntries[i].pfnOrg == uValue) … … 9670 9669 { 9671 9670 DWORD dwErr = GetLastError(); 9672 PKWVIRTALLOCpTracker = (PKWVIRTALLOC)kHlpAlloc(sizeof(*pTracker));9671 pTracker = (PKWVIRTALLOC)kHlpAlloc(sizeof(*pTracker)); 9673 9672 if (pTracker) 9674 9673 { … … 11078 11077 { TUPLE("__p___initenv"), NULL, (KUPTR)kwSandbox_msvcrt___p___initenv}, 11079 11078 { TUPLE("__p___winitenv"), NULL, (KUPTR)kwSandbox_msvcrt___p___winitenv}, 11080 { TUPLE("_environ"), NULL, (KUPTR)&g_Sandbox.environ },11081 { TUPLE("_wenviron"), NULL, (KUPTR)&g_Sandbox.wenviron },11079 { TUPLE("_environ"), NULL, (KUPTR)&g_Sandbox.environC }, 11080 { TUPLE("_wenviron"), NULL, (KUPTR)&g_Sandbox.wenvironC }, 11082 11081 { TUPLE("_get_environ"), NULL, (KUPTR)kwSandbox_msvcrt__get_environ }, 11083 11082 { TUPLE("_get_wenviron"), NULL, (KUPTR)kwSandbox_msvcrt__get_wenviron }, … … 11645 11644 { 11646 11645 pSandbox->papszEnvVars[iDst] = pszCopy; 11647 pSandbox->environ [iDst]= pszCopy;11646 pSandbox->environC[iDst] = pszCopy; 11648 11647 pSandbox->papwszEnvVars[iDst] = pwszCopy; 11649 pSandbox->wenviron [iDst]= pwszCopy;11648 pSandbox->wenvironC[iDst] = pwszCopy; 11650 11649 11651 11650 /* When we see the path, we must tell the system or native exec and module loading won't work . */ … … 11671 11670 } 11672 11671 pSandbox->papszEnvVars[iDst] = NULL; 11673 pSandbox->environ [iDst]= NULL;11672 pSandbox->environC[iDst] = NULL; 11674 11673 pSandbox->papwszEnvVars[iDst] = NULL; 11675 pSandbox->wenviron [iDst]= NULL;11674 pSandbox->wenvironC[iDst] = NULL; 11676 11675 } 11677 11676 else … … 11888 11887 for (i = 0; pSandbox->papszEnvVars[i]; i++) 11889 11888 kHlpFree(pSandbox->papszEnvVars[i]); 11890 pSandbox->environ [0] = NULL;11889 pSandbox->environC[0] = NULL; 11891 11890 pSandbox->papszEnvVars[0] = NULL; 11892 11891 11893 11892 for (i = 0; pSandbox->papwszEnvVars[i]; i++) 11894 11893 kHlpFree(pSandbox->papwszEnvVars[i]); 11895 pSandbox->wenviron [0]= NULL;11894 pSandbox->wenvironC[0] = NULL; 11896 11895 pSandbox->papwszEnvVars[0] = NULL; 11897 11896 } … … 13066 13065 && fseek(pFile, 0, SEEK_SET) == 0) 13067 13066 { 13068 char *pszFile = kHlpAllocZ(cbFile + 3); 13069 if (pszFile) 13070 { 13071 size_t cbRead = fread(pszFile, 1, cbFile + 1, pFile); 13067 char *pszContent = kHlpAllocZ(cbFile + 3); 13068 *ppszFileContent = pszContent; 13069 if (pszContent) 13070 { 13071 size_t cbRead = fread(pszContent, 1, cbFile + 1, pFile); 13072 13072 if ( feof(pFile) 13073 13073 && !ferror(pFile)) … … 13078 13078 char ch; 13079 13079 13080 psz File[cbRead] = '\0';13081 psz File[cbRead + 1] = '\0';13082 psz File[cbRead + 2] = '\0';13083 13084 while ((ch = psz File[off]) != '\0')13080 pszContent[cbRead] = '\0'; 13081 pszContent[cbRead + 1] = '\0'; 13082 pszContent[cbRead + 2] = '\0'; 13083 13084 while ((ch = pszContent[off]) != '\0') 13085 13085 { 13086 13086 char *pszArg; … … 13095 13095 13096 13096 case '\\': 13097 if (psz File[off + 1] == '\n' || pszFile[off + 1] == '\r')13097 if (pszContent[off + 1] == '\n' || pszContent[off + 1] == '\r') 13098 13098 { 13099 13099 off += 2; … … 13102 13102 /* fall thru */ 13103 13103 default: 13104 pszArg = &psz File[off];13104 pszArg = &pszContent[off]; 13105 13105 do 13106 ch = psz File[++off];13106 ch = pszContent[++off]; 13107 13107 while (ch != '\0' && ch != ' ' && ch != '\t' && ch != '\n' && ch != '\r'); 13108 psz File[off++] = '\0';13108 pszContent[off++] = '\0'; 13109 13109 break; 13110 13110 13111 13111 case '\'': 13112 pszArg = &psz File[++off];13113 while ((ch = psz File[off]) != '\0' && ch != '\'')13112 pszArg = &pszContent[++off]; 13113 while ((ch = pszContent[off]) != '\0' && ch != '\'') 13114 13114 off++; 13115 psz File[off++] = '\0';13115 pszContent[off++] = '\0'; 13116 13116 break; 13117 13117 13118 13118 case '\"': /** @todo escape sequences */ 13119 pszArg = &psz File[++off];13120 while ((ch = psz File[off]) != '\0' && ch != '"')13119 pszArg = &pszContent[++off]; 13120 while ((ch = pszContent[off]) != '\0' && ch != '"') 13121 13121 off++; 13122 psz File[off++] = '\0';13122 pszContent[off++] = '\0'; 13123 13123 break; 13124 13124 } … … 13249 13249 else if (kHlpStrComp(pszArg, "default-env") == 0) 13250 13250 { 13251 unsigned i;13251 unsigned j; 13252 13252 pCur->cEnvVars = 0; 13253 for ( i = 0; environ[i] && rc == 0; i++)13254 rc = kwFullTestVectorAppend(&pCur->papszEnvVars, &pCur->cEnvVars, kHlpStrDup(environ[ i])); /* leaks; unchecked */13253 for (j = 0; environ[j] && rc == 0; j++) 13254 rc = kwFullTestVectorAppend(&pCur->papszEnvVars, &pCur->cEnvVars, kHlpStrDup(environ[j])); /* leaks; unchecked */ 13255 13255 } 13256 13256 else if (kHlpStrComp(pszArg, "chdir") == 0)
Note:
See TracChangeset
for help on using the changeset viewer.