diff options
author | Scott MacVicar <scottmac@php.net> | 2008-05-29 11:31:02 +0000 |
---|---|---|
committer | Scott MacVicar <scottmac@php.net> | 2008-05-29 11:31:02 +0000 |
commit | 19322fc782af429938da8d3b421c0807cf1b848a (patch) | |
tree | 5d7166f79fd3bd87b5a43ee9b398e300635a66e2 /TSRM/tsrm_win32.c | |
parent | fc6fa44097c45a9476bb5d2087a169044f89db49 (diff) | |
download | php-git-19322fc782af429938da8d3b421c0807cf1b848a.tar.gz |
MFH: Fix bug when command is quoted and parameters are quoted during call to exec, the result is that cmd.exe /c strips the first and last quote.
Diffstat (limited to 'TSRM/tsrm_win32.c')
-rw-r--r-- | TSRM/tsrm_win32.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c index 2c9a24f35f..57f9fbc9fd 100644 --- a/TSRM/tsrm_win32.c +++ b/TSRM/tsrm_win32.c @@ -88,7 +88,7 @@ TSRM_API int tsrm_win32_access(const char *pathname, int mode) { if (mode == 1 /*X_OK*/) { #if 1 - /* This code is not supported by Windows 98, + /* This code is not supported by Windows 98, * but we don't support it anymore */ DWORD type; @@ -96,7 +96,7 @@ TSRM_API int tsrm_win32_access(const char *pathname, int mode) #else SHFILEINFO sfi; - return access(pathname, 0) == 0 && + return access(pathname, 0) == 0 && SHGetFileInfo(pathname, 0, &sfi, sizeof(SHFILEINFO), SHGFI_EXETYPE) != 0 ? 0 : -1; #endif } else { @@ -109,22 +109,22 @@ static process_pair *process_get(FILE *stream TSRMLS_DC) { process_pair *ptr; process_pair *newptr; - + for (ptr = TWG(process); ptr < (TWG(process) + TWG(process_size)); ptr++) { if (ptr->stream == stream) { break; } } - + if (ptr < (TWG(process) + TWG(process_size))) { return ptr; } - + newptr = (process_pair*)realloc((void*)TWG(process), (TWG(process_size)+1)*sizeof(process_pair)); if (newptr == NULL) { return NULL; } - + TWG(process) = newptr; ptr = newptr + TWG(process_size); TWG(process_size)++; @@ -136,7 +136,7 @@ static shm_pair *shm_get(int key, void *addr) shm_pair *ptr; shm_pair *newptr; TSRMLS_FETCH(); - + for (ptr = TWG(shm); ptr < (TWG(shm) + TWG(shm_size)); ptr++) { if (!ptr->descriptor) { continue; @@ -151,12 +151,12 @@ static shm_pair *shm_get(int key, void *addr) if (ptr < (TWG(shm) + TWG(shm_size))) { return ptr; } - + newptr = (shm_pair*)realloc((void*)TWG(shm), (TWG(shm_size)+1)*sizeof(shm_pair)); if (newptr == NULL) { return NULL; } - + TWG(shm) = newptr; ptr = newptr + TWG(shm_size); TWG(shm_size)++; @@ -195,7 +195,7 @@ TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, if (!str_len || !CreatePipe(&in, &out, &security, 2048L)) { return NULL; } - + memset(&startup, 0, sizeof(STARTUPINFO)); memset(&process, 0, sizeof(PROCESS_INFORMATION)); @@ -217,8 +217,8 @@ TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, startup.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); } - cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c ")); - sprintf(cmd, "%s /c %s", TWG(comspec), command); + cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c ")+2); + sprintf(cmd, "%s /c \"%s\"", TWG(comspec), command); if (!CreateProcess(NULL, cmd, &security, &security, security.bInheritHandle, NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW, env, cwd, &startup, &process)) { return NULL; } |