Diff for /embedaddon/php/ext/standard/exec.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/21 23:48:02 version 1.1.1.2, 2012/05/29 12:34:43
Line 22 Line 22
 #include "php.h"  #include "php.h"
 #include <ctype.h>  #include <ctype.h>
 #include "php_string.h"  #include "php_string.h"
 #include "safe_mode.h"  
 #include "ext/standard/head.h"  #include "ext/standard/head.h"
 #include "ext/standard/file.h"  #include "ext/standard/file.h"
 #include "basic_functions.h"  #include "basic_functions.h"
Line 61 Line 60
 PHPAPI int php_exec(int type, char *cmd, zval *array, zval *return_value TSRMLS_DC)  PHPAPI int php_exec(int type, char *cmd, zval *array, zval *return_value TSRMLS_DC)
 {  {
         FILE *fp;          FILE *fp;
        char *buf, *tmp=NULL;        char *buf;
         int l = 0, pclose_return;          int l = 0, pclose_return;
        char *cmd_p, *b, *c, *d=NULL;        char *b, *d=NULL;
         php_stream *stream;          php_stream *stream;
         size_t buflen, bufl = 0;          size_t buflen, bufl = 0;
 #if PHP_SIGCHILD  #if PHP_SIGCHILD
         void (*sig_handler)() = NULL;          void (*sig_handler)() = NULL;
 #endif  #endif
   
         if (PG(safe_mode)) {  
                 if ((c = strchr(cmd, ' '))) {  
                         *c = '\0';  
                         c++;  
                 }  
                 if (strstr(cmd, "..")) {  
                         php_error_docref(NULL TSRMLS_CC, E_WARNING, "No '..' components allowed in path");  
                         goto err;  
                 }  
                   
                 b = strrchr(cmd, PHP_DIR_SEPARATOR);  
   
 #ifdef PHP_WIN32  
                 if (b && *b == '\\' && b == cmd) {  
                         php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid absolute path.");  
                         goto err;  
                 }  
 #endif  
   
                 spprintf(&d, 0, "%s%s%s%s%s", PG(safe_mode_exec_dir), (b ? "" : "/"), (b ? b : cmd), (c ? " " : ""), (c ? c : ""));  
                 if (c) {  
                         *(c - 1) = ' ';  
                 }  
                 cmd_p = php_escape_shell_cmd(d);  
                 efree(d);  
                 d = cmd_p;  
         } else {  
                 cmd_p = cmd;  
         }  
   
 #if PHP_SIGCHILD  #if PHP_SIGCHILD
         sig_handler = signal (SIGCHLD, SIG_DFL);          sig_handler = signal (SIGCHLD, SIG_DFL);
 #endif  #endif
   
 #ifdef PHP_WIN32  #ifdef PHP_WIN32
        fp = VCWD_POPEN(cmd_p, "rb");        fp = VCWD_POPEN(cmd, "rb");
 #else  #else
        fp = VCWD_POPEN(cmd_p, "r");        fp = VCWD_POPEN(cmd, "r");
 #endif  #endif
         if (!fp) {          if (!fp) {
                 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to fork [%s]", cmd);                  php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to fork [%s]", cmd);
Line 140  PHPAPI int php_exec(int type, char *cmd, zval *array,  Line 109  PHPAPI int php_exec(int type, char *cmd, zval *array, 
   
                         if (type == 1) {                          if (type == 1) {
                                 PHPWRITE(buf, bufl);                                  PHPWRITE(buf, bufl);
                                if (OG(ob_nesting_level) < 1) {                                if (php_output_get_level(TSRMLS_C) < 1) {
                                         sapi_flush(TSRMLS_C);                                          sapi_flush(TSRMLS_C);
                                 }                                  }
                         } else if (type == 2) {                          } else if (type == 2) {
Line 170  PHPAPI int php_exec(int type, char *cmd, zval *array,  Line 139  PHPAPI int php_exec(int type, char *cmd, zval *array, 
                         }                          }
   
                         /* Return last line from the shell command */                          /* Return last line from the shell command */
                        if (PG(magic_quotes_runtime)) {                        RETVAL_STRINGL(buf, bufl, 1);
                                int len; 
 
                                tmp = php_addslashes(buf, bufl, &len, 0 TSRMLS_CC); 
                                RETVAL_STRINGL(tmp, len, 0); 
                        } else { 
                                RETVAL_STRINGL(buf, bufl, 1); 
                        } 
                 } else { /* should return NULL, but for BC we return "" */                  } else { /* should return NULL, but for BC we return "" */
                         RETVAL_EMPTY_STRING();                          RETVAL_EMPTY_STRING();
                 }                  }
Line 484  PHP_FUNCTION(shell_exec) Line 446  PHP_FUNCTION(shell_exec)
                 return;                  return;
         }          }
   
         if (PG(safe_mode)) {  
                 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot execute using backquotes in Safe Mode");  
                 RETURN_FALSE;  
         }  
   
 #ifdef PHP_WIN32  #ifdef PHP_WIN32
         if ((in=VCWD_POPEN(command, "rt"))==NULL) {          if ((in=VCWD_POPEN(command, "rt"))==NULL) {
 #else  #else
Line 520  PHP_FUNCTION(proc_nice) Line 477  PHP_FUNCTION(proc_nice)
         }          }
   
         errno = 0;          errno = 0;
        nice(pri);        php_ignore_value(nice(pri));
         if (errno) {          if (errno) {
                 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only a super user may attempt to increase the priority of a process");                  php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only a super user may attempt to increase the priority of a process");
                 RETURN_FALSE;                  RETURN_FALSE;

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>