Diff for /embedaddon/php/ext/phar/phar_object.c between versions 1.1 and 1.1.1.4

version 1.1, 2012/02/21 23:47:59 version 1.1.1.4, 2014/06/15 20:03:54
Line 2 Line 2
   +----------------------------------------------------------------------+    +----------------------------------------------------------------------+
   | phar php single-file executable PHP extension                        |    | phar php single-file executable PHP extension                        |
   +----------------------------------------------------------------------+    +----------------------------------------------------------------------+
  | Copyright (c) 2005-2012 The PHP Group                                |  | Copyright (c) 2005-2014 The PHP Group                                |
   +----------------------------------------------------------------------+    +----------------------------------------------------------------------+
   | This source file is subject to version 3.01 of the PHP license,      |    | This source file is subject to version 3.01 of the PHP license,      |
   | that is bundled with this package in the file LICENSE, and is        |    | that is bundled with this package in the file LICENSE, and is        |
Line 58  static int phar_file_type(HashTable *mimes, char *file Line 58  static int phar_file_type(HashTable *mimes, char *file
   
 static void phar_mung_server_vars(char *fname, char *entry, int entry_len, char *basename, int request_uri_len TSRMLS_DC) /* {{{ */  static void phar_mung_server_vars(char *fname, char *entry, int entry_len, char *basename, int request_uri_len TSRMLS_DC) /* {{{ */
 {  {
 #if PHP_MAJOR_VERSION >= 6  
         int is_unicode = 0;  
 #endif  
         HashTable *_SERVER;          HashTable *_SERVER;
         zval **stuff;          zval **stuff;
         char *path_info;          char *path_info;
Line 76  static void phar_mung_server_vars(char *fname, char *e Line 73  static void phar_mung_server_vars(char *fname, char *e
         _SERVER = Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]);          _SERVER = Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]);
   
         /* PATH_INFO and PATH_TRANSLATED should always be munged */          /* PATH_INFO and PATH_TRANSLATED should always be munged */
 #if PHP_MAJOR_VERSION >= 6  
         if (phar_find_key(_SERVER, "PATH_INFO", sizeof("PATH_INFO"), (void **) &stuff TSRMLS_CC)) {  
                 if (Z_TYPE_PP(stuff) == IS_UNICODE) {  
                         is_unicode = 1;  
                         zval_unicode_to_string(*stuff TSRMLS_CC);  
                 } else {  
                         is_unicode = 0;  
                 }  
 #else  
         if (SUCCESS == zend_hash_find(_SERVER, "PATH_INFO", sizeof("PATH_INFO"), (void **) &stuff)) {          if (SUCCESS == zend_hash_find(_SERVER, "PATH_INFO", sizeof("PATH_INFO"), (void **) &stuff)) {
 #endif  
   
                 path_info = Z_STRVAL_PP(stuff);                  path_info = Z_STRVAL_PP(stuff);
                 code = Z_STRLEN_PP(stuff);                  code = Z_STRLEN_PP(stuff);
   
Line 96  static void phar_mung_server_vars(char *fname, char *e Line 82  static void phar_mung_server_vars(char *fname, char *e
   
                         MAKE_STD_ZVAL(temp);                          MAKE_STD_ZVAL(temp);
                         ZVAL_STRINGL(temp, path_info, code, 0);                          ZVAL_STRINGL(temp, path_info, code, 0);
#if PHP_MAJOR_VERSION >= 6
                        if (is_unicode) { 
                                zval_string_to_unicode(*stuff TSRMLS_CC); 
                        } 
#endif 
                         zend_hash_update(_SERVER, "PHAR_PATH_INFO", sizeof("PHAR_PATH_INFO"), &temp, sizeof(zval **), NULL);                          zend_hash_update(_SERVER, "PHAR_PATH_INFO", sizeof("PHAR_PATH_INFO"), &temp, sizeof(zval **), NULL);
                 }                  }
         }          }
   
 #if PHP_MAJOR_VERSION >= 6  
         if (phar_find_key(_SERVER, "PATH_TRANSLATED", sizeof("PATH_TRANSLATED"), (void **) &stuff TSRMLS_CC)) {  
                 if (Z_TYPE_PP(stuff) == IS_UNICODE) {  
                         is_unicode = 1;  
                         zval_unicode_to_string(*stuff TSRMLS_CC);  
                 } else {  
                         is_unicode = 0;  
                 }  
 #else  
         if (SUCCESS == zend_hash_find(_SERVER, "PATH_TRANSLATED", sizeof("PATH_TRANSLATED"), (void **) &stuff)) {          if (SUCCESS == zend_hash_find(_SERVER, "PATH_TRANSLATED", sizeof("PATH_TRANSLATED"), (void **) &stuff)) {
 #endif  
   
                 path_info = Z_STRVAL_PP(stuff);                  path_info = Z_STRVAL_PP(stuff);
                 code = Z_STRLEN_PP(stuff);                  code = Z_STRLEN_PP(stuff);
                 Z_STRLEN_PP(stuff) = spprintf(&(Z_STRVAL_PP(stuff)), 4096, "phar://%s%s", fname, entry);                  Z_STRLEN_PP(stuff) = spprintf(&(Z_STRVAL_PP(stuff)), 4096, "phar://%s%s", fname, entry);
   
                 MAKE_STD_ZVAL(temp);                  MAKE_STD_ZVAL(temp);
                 ZVAL_STRINGL(temp, path_info, code, 0);                  ZVAL_STRINGL(temp, path_info, code, 0);
#if PHP_MAJOR_VERSION >= 6
                if (is_unicode) { 
                        zval_string_to_unicode(*stuff TSRMLS_CC); 
                } 
#endif 
                 zend_hash_update(_SERVER, "PHAR_PATH_TRANSLATED", sizeof("PHAR_PATH_TRANSLATED"), (void *) &temp, sizeof(zval **), NULL);                  zend_hash_update(_SERVER, "PHAR_PATH_TRANSLATED", sizeof("PHAR_PATH_TRANSLATED"), (void *) &temp, sizeof(zval **), NULL);
         }          }
   
Line 136  static void phar_mung_server_vars(char *fname, char *e Line 103  static void phar_mung_server_vars(char *fname, char *e
         }          }
   
         if (PHAR_GLOBALS->phar_SERVER_mung_list & PHAR_MUNG_REQUEST_URI) {          if (PHAR_GLOBALS->phar_SERVER_mung_list & PHAR_MUNG_REQUEST_URI) {
 #if PHP_MAJOR_VERSION >= 6  
                 if (phar_find_key(_SERVER, "REQUEST_URI", sizeof("REQUEST_URI"), (void **) &stuff TSRMLS_CC)) {  
                 if (Z_TYPE_PP(stuff) == IS_UNICODE) {  
                         is_unicode = 1;  
                         zval_unicode_to_string(*stuff TSRMLS_CC);  
                 } else {  
                         is_unicode = 0;  
                 }  
 #else  
                 if (SUCCESS == zend_hash_find(_SERVER, "REQUEST_URI", sizeof("REQUEST_URI"), (void **) &stuff)) {                  if (SUCCESS == zend_hash_find(_SERVER, "REQUEST_URI", sizeof("REQUEST_URI"), (void **) &stuff)) {
 #endif  
   
                         path_info = Z_STRVAL_PP(stuff);                          path_info = Z_STRVAL_PP(stuff);
                         code = Z_STRLEN_PP(stuff);                          code = Z_STRLEN_PP(stuff);
   
Line 156  static void phar_mung_server_vars(char *fname, char *e Line 112  static void phar_mung_server_vars(char *fname, char *e
   
                                 MAKE_STD_ZVAL(temp);                                  MAKE_STD_ZVAL(temp);
                                 ZVAL_STRINGL(temp, path_info, code, 0);                                  ZVAL_STRINGL(temp, path_info, code, 0);
#if PHP_MAJOR_VERSION >= 6
                                if (is_unicode) { 
                                        zval_string_to_unicode(*stuff TSRMLS_CC); 
                                } 
#endif 
                                 zend_hash_update(_SERVER, "PHAR_REQUEST_URI", sizeof("PHAR_REQUEST_URI"), (void *) &temp, sizeof(zval **), NULL);                                  zend_hash_update(_SERVER, "PHAR_REQUEST_URI", sizeof("PHAR_REQUEST_URI"), (void *) &temp, sizeof(zval **), NULL);
                         }                          }
                 }                  }
         }          }
   
         if (PHAR_GLOBALS->phar_SERVER_mung_list & PHAR_MUNG_PHP_SELF) {          if (PHAR_GLOBALS->phar_SERVER_mung_list & PHAR_MUNG_PHP_SELF) {
 #if PHP_MAJOR_VERSION >= 6  
                 if (phar_find_key(_SERVER, "PHP_SELF", sizeof("PHP_SELF"), (void **) &stuff TSRMLS_CC)) {  
                 if (Z_TYPE_PP(stuff) == IS_UNICODE) {  
                         is_unicode = 1;  
                         zval_unicode_to_string(*stuff TSRMLS_CC);  
                 } else {  
                         is_unicode = 0;  
                 }  
 #else  
                 if (SUCCESS == zend_hash_find(_SERVER, "PHP_SELF", sizeof("PHP_SELF"), (void **) &stuff)) {                  if (SUCCESS == zend_hash_find(_SERVER, "PHP_SELF", sizeof("PHP_SELF"), (void **) &stuff)) {
 #endif  
   
                         path_info = Z_STRVAL_PP(stuff);                          path_info = Z_STRVAL_PP(stuff);
                         code = Z_STRLEN_PP(stuff);                          code = Z_STRLEN_PP(stuff);
   
Line 187  static void phar_mung_server_vars(char *fname, char *e Line 128  static void phar_mung_server_vars(char *fname, char *e
   
                                 MAKE_STD_ZVAL(temp);                                  MAKE_STD_ZVAL(temp);
                                 ZVAL_STRINGL(temp, path_info, code, 0);                                  ZVAL_STRINGL(temp, path_info, code, 0);
#if PHP_MAJOR_VERSION >= 6
                                if (is_unicode) { 
                                        zval_string_to_unicode(*stuff TSRMLS_CC); 
                                } 
#endif 
                                 zend_hash_update(_SERVER, "PHAR_PHP_SELF", sizeof("PHAR_PHP_SELF"), (void *) &temp, sizeof(zval **), NULL);                                  zend_hash_update(_SERVER, "PHAR_PHP_SELF", sizeof("PHAR_PHP_SELF"), (void *) &temp, sizeof(zval **), NULL);
                         }                          }
                 }                  }
         }          }
   
         if (PHAR_GLOBALS->phar_SERVER_mung_list & PHAR_MUNG_SCRIPT_NAME) {          if (PHAR_GLOBALS->phar_SERVER_mung_list & PHAR_MUNG_SCRIPT_NAME) {
 #if PHP_MAJOR_VERSION >= 6  
                 if (phar_find_key(_SERVER, "SCRIPT_NAME", sizeof("SCRIPT_NAME"), (void **) &stuff TSRMLS_CC)) {  
                 if (Z_TYPE_PP(stuff) == IS_UNICODE) {  
                         is_unicode = 1;  
                         zval_unicode_to_string(*stuff TSRMLS_CC);  
                 } else {  
                         is_unicode = 0;  
                 }  
 #else  
                 if (SUCCESS == zend_hash_find(_SERVER, "SCRIPT_NAME", sizeof("SCRIPT_NAME"), (void **) &stuff)) {                  if (SUCCESS == zend_hash_find(_SERVER, "SCRIPT_NAME", sizeof("SCRIPT_NAME"), (void **) &stuff)) {
 #endif  
   
                         path_info = Z_STRVAL_PP(stuff);                          path_info = Z_STRVAL_PP(stuff);
                         code = Z_STRLEN_PP(stuff);                          code = Z_STRLEN_PP(stuff);
                         ZVAL_STRINGL(*stuff, entry, entry_len, 1);                          ZVAL_STRINGL(*stuff, entry, entry_len, 1);
   
                         MAKE_STD_ZVAL(temp);                          MAKE_STD_ZVAL(temp);
                         ZVAL_STRINGL(temp, path_info, code, 0);                          ZVAL_STRINGL(temp, path_info, code, 0);
#if PHP_MAJOR_VERSION >= 6
                        if (is_unicode) { 
                                zval_string_to_unicode(*stuff TSRMLS_CC); 
                        } 
#endif 
                         zend_hash_update(_SERVER, "PHAR_SCRIPT_NAME", sizeof("PHAR_SCRIPT_NAME"), (void *) &temp, sizeof(zval **), NULL);                          zend_hash_update(_SERVER, "PHAR_SCRIPT_NAME", sizeof("PHAR_SCRIPT_NAME"), (void *) &temp, sizeof(zval **), NULL);
                 }                  }
         }          }
   
         if (PHAR_GLOBALS->phar_SERVER_mung_list & PHAR_MUNG_SCRIPT_FILENAME) {          if (PHAR_GLOBALS->phar_SERVER_mung_list & PHAR_MUNG_SCRIPT_FILENAME) {
 #if PHP_MAJOR_VERSION >= 6  
                 if (phar_find_key(_SERVER, "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME"), (void **) &stuff TSRMLS_CC)) {  
                 if (Z_TYPE_PP(stuff) == IS_UNICODE) {  
                         is_unicode = 1;  
                         zval_unicode_to_string(*stuff TSRMLS_CC);  
                 } else {  
                         is_unicode = 0;  
                 }  
 #else  
                 if (SUCCESS == zend_hash_find(_SERVER, "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME"), (void **) &stuff)) {                  if (SUCCESS == zend_hash_find(_SERVER, "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME"), (void **) &stuff)) {
 #endif  
   
                         path_info = Z_STRVAL_PP(stuff);                          path_info = Z_STRVAL_PP(stuff);
                         code = Z_STRLEN_PP(stuff);                          code = Z_STRLEN_PP(stuff);
                         Z_STRLEN_PP(stuff) = spprintf(&(Z_STRVAL_PP(stuff)), 4096, "phar://%s%s", fname, entry);                          Z_STRLEN_PP(stuff) = spprintf(&(Z_STRVAL_PP(stuff)), 4096, "phar://%s%s", fname, entry);
   
                         MAKE_STD_ZVAL(temp);                          MAKE_STD_ZVAL(temp);
                         ZVAL_STRINGL(temp, path_info, code, 0);                          ZVAL_STRINGL(temp, path_info, code, 0);
#if PHP_MAJOR_VERSION >= 6
                        if (is_unicode) { 
                                zval_string_to_unicode(*stuff TSRMLS_CC); 
                        } 
#endif 
                         zend_hash_update(_SERVER, "PHAR_SCRIPT_FILENAME", sizeof("PHAR_SCRIPT_FILENAME"), (void *) &temp, sizeof(zval **), NULL);                          zend_hash_update(_SERVER, "PHAR_SCRIPT_FILENAME", sizeof("PHAR_SCRIPT_FILENAME"), (void *) &temp, sizeof(zval **), NULL);
                 }                  }
         }          }
Line 257  static void phar_mung_server_vars(char *fname, char *e Line 164  static void phar_mung_server_vars(char *fname, char *e
   
 static int phar_file_action(phar_archive_data *phar, phar_entry_info *info, char *mime_type, int code, char *entry, int entry_len, char *arch, char *basename, char *ru, int ru_len TSRMLS_DC) /* {{{ */  static int phar_file_action(phar_archive_data *phar, phar_entry_info *info, char *mime_type, int code, char *entry, int entry_len, char *arch, char *basename, char *ru, int ru_len TSRMLS_DC) /* {{{ */
 {  {
        char *name = NULL, buf[8192], *cwd;        char *name = NULL, buf[8192];
         const char *cwd;
         zend_syntax_highlighter_ini syntax_highlighter_ini;          zend_syntax_highlighter_ini syntax_highlighter_ini;
         sapi_header_line ctr = {0};          sapi_header_line ctr = {0};
         size_t got;          size_t got;
Line 427  static void phar_do_403(char *entry, int entry_len TSR Line 335  static void phar_do_403(char *entry, int entry_len TSR
         sapi_header_line ctr = {0};          sapi_header_line ctr = {0};
   
         ctr.response_code = 403;          ctr.response_code = 403;
        ctr.line_len = sizeof("HTTP/1.0 403 Access Denied");        ctr.line_len = sizeof("HTTP/1.0 403 Access Denied")-1;
         ctr.line = "HTTP/1.0 403 Access Denied";          ctr.line = "HTTP/1.0 403 Access Denied";
         sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);          sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);
         sapi_send_headers(TSRMLS_C);          sapi_send_headers(TSRMLS_C);
Line 452  static void phar_do_404(phar_archive_data *phar, char  Line 360  static void phar_do_404(phar_archive_data *phar, char 
         }          }
   
         ctr.response_code = 404;          ctr.response_code = 404;
        ctr.line_len = sizeof("HTTP/1.0 404 Not Found")+1;        ctr.line_len = sizeof("HTTP/1.0 404 Not Found")-1;
         ctr.line = "HTTP/1.0 404 Not Found";          ctr.line = "HTTP/1.0 404 Not Found";
         sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);          sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);
         sapi_send_headers(TSRMLS_C);          sapi_send_headers(TSRMLS_C);
Line 540  PHP_METHOD(Phar, running) Line 448  PHP_METHOD(Phar, running)
                 return;                  return;
         }          }
   
        fname = zend_get_executed_filename(TSRMLS_C);        fname = (char*)zend_get_executed_filename(TSRMLS_C);
         fname_len = strlen(fname);          fname_len = strlen(fname);
   
         if (fname_len > 7 && !memcmp(fname, "phar://", 7) && SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {          if (fname_len > 7 && !memcmp(fname, "phar://", 7) && SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {
Line 574  PHP_METHOD(Phar, mount) Line 482  PHP_METHOD(Phar, mount)
                 return;                  return;
         }          }
   
        fname = zend_get_executed_filename(TSRMLS_C);        fname = (char*)zend_get_executed_filename(TSRMLS_C);
         fname_len = strlen(fname);          fname_len = strlen(fname);
   
 #ifdef PHP_WIN32  #ifdef PHP_WIN32
Line 658  PHP_METHOD(Phar, webPhar) Line 566  PHP_METHOD(Phar, webPhar)
         zval *mimeoverride = NULL, *rewrite = NULL;          zval *mimeoverride = NULL, *rewrite = NULL;
         char *alias = NULL, *error, *index_php = NULL, *f404 = NULL, *ru = NULL;          char *alias = NULL, *error, *index_php = NULL, *f404 = NULL, *ru = NULL;
         int alias_len = 0, ret, f404_len = 0, free_pathinfo = 0, ru_len = 0;          int alias_len = 0, ret, f404_len = 0, free_pathinfo = 0, ru_len = 0;
        char *fname, *basename, *path_info, *mime_type = NULL, *entry, *pt;        char *fname, *path_info, *mime_type = NULL, *entry, *pt;
         const char *basename;
         int fname_len, entry_len, code, index_php_len = 0, not_cgi;          int fname_len, entry_len, code, index_php_len = 0, not_cgi;
         phar_archive_data *phar = NULL;          phar_archive_data *phar = NULL;
         phar_entry_info *info = NULL;          phar_entry_info *info = NULL;
Line 668  PHP_METHOD(Phar, webPhar) Line 577  PHP_METHOD(Phar, webPhar)
         }          }
   
         phar_request_initialize(TSRMLS_C);          phar_request_initialize(TSRMLS_C);
        fname = zend_get_executed_filename(TSRMLS_C);        fname = (char*)zend_get_executed_filename(TSRMLS_C);
         fname_len = strlen(fname);          fname_len = strlen(fname);
   
         if (phar_open_executed_filename(alias, alias_len, &error TSRMLS_CC) != SUCCESS) {          if (phar_open_executed_filename(alias, alias_len, &error TSRMLS_CC) != SUCCESS) {
Line 891  PHP_METHOD(Phar, webPhar) Line 800  PHP_METHOD(Phar, webPhar)
                         char *tmp = NULL, sa = '\0';                          char *tmp = NULL, sa = '\0';
                         sapi_header_line ctr = {0};                          sapi_header_line ctr = {0};
                         ctr.response_code = 301;                          ctr.response_code = 301;
                        ctr.line_len = sizeof("HTTP/1.1 301 Moved Permanently")+1;                        ctr.line_len = sizeof("HTTP/1.1 301 Moved Permanently")-1;
                         ctr.line = "HTTP/1.1 301 Moved Permanently";                          ctr.line = "HTTP/1.1 301 Moved Permanently";
                         sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);                          sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);
   
Line 934  PHP_METHOD(Phar, webPhar) Line 843  PHP_METHOD(Phar, webPhar)
         }          }
   
         if (mimeoverride && zend_hash_num_elements(Z_ARRVAL_P(mimeoverride))) {          if (mimeoverride && zend_hash_num_elements(Z_ARRVAL_P(mimeoverride))) {
                char *ext = zend_memrchr(entry, '.', entry_len);                const char *ext = zend_memrchr(entry, '.', entry_len);
                 zval **val;                  zval **val;
   
                 if (ext) {                  if (ext) {
                         ++ext;                          ++ext;
   
 #if PHP_MAJOR_VERSION >= 6  
                         if (phar_find_key(Z_ARRVAL_P(mimeoverride), ext, strlen(ext)+1, (void **) &val TSRMLS_CC)) {  
 #else  
                         if (SUCCESS == zend_hash_find(Z_ARRVAL_P(mimeoverride), ext, strlen(ext)+1, (void **) &val)) {                          if (SUCCESS == zend_hash_find(Z_ARRVAL_P(mimeoverride), ext, strlen(ext)+1, (void **) &val)) {
 #endif  
                                 switch (Z_TYPE_PP(val)) {                                  switch (Z_TYPE_PP(val)) {
                                         case IS_LONG:                                          case IS_LONG:
                                                 if (Z_LVAL_PP(val) == PHAR_MIME_PHP || Z_LVAL_PP(val) == PHAR_MIME_PHPS) {                                                  if (Z_LVAL_PP(val) == PHAR_MIME_PHP || Z_LVAL_PP(val) == PHAR_MIME_PHPS) {
Line 958  PHP_METHOD(Phar, webPhar) Line 863  PHP_METHOD(Phar, webPhar)
                                                         RETURN_FALSE;                                                          RETURN_FALSE;
                                                 }                                                  }
                                                 break;                                                  break;
 #if PHP_MAJOR_VERSION >= 6  
                                         case IS_UNICODE:  
                                                 zval_unicode_to_string(*(val) TSRMLS_CC);  
                                                 /* break intentionally omitted */  
 #endif  
                                         case IS_STRING:                                          case IS_STRING:
                                                 mime_type = Z_STRVAL_PP(val);                                                  mime_type = Z_STRVAL_PP(val);
                                                 code = PHAR_MIME_OTHER;                                                  code = PHAR_MIME_OTHER;
Line 1013  PHP_METHOD(Phar, mungServer) Line 913  PHP_METHOD(Phar, mungServer)
   
         for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(mungvalues)); SUCCESS == zend_hash_has_more_elements(Z_ARRVAL_P(mungvalues)); zend_hash_move_forward(Z_ARRVAL_P(mungvalues))) {          for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(mungvalues)); SUCCESS == zend_hash_has_more_elements(Z_ARRVAL_P(mungvalues)); zend_hash_move_forward(Z_ARRVAL_P(mungvalues))) {
                 zval **data = NULL;                  zval **data = NULL;
 #if PHP_MAJOR_VERSION >= 6  
                 zval *unicopy = NULL;  
 #endif  
   
                 if (SUCCESS != zend_hash_get_current_data(Z_ARRVAL_P(mungvalues), (void **) &data)) {                  if (SUCCESS != zend_hash_get_current_data(Z_ARRVAL_P(mungvalues), (void **) &data)) {
                         zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "unable to retrieve array value in Phar::mungServer()");                          zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "unable to retrieve array value in Phar::mungServer()");
                         return;                          return;
                 }                  }
   
 #if PHP_MAJOR_VERSION >= 6  
                 if (Z_TYPE_PP(data) == IS_UNICODE) {  
                         MAKE_STD_ZVAL(unicopy);  
                         *unicopy = **data;  
                         zval_copy_ctor(unicopy);  
                         INIT_PZVAL(unicopy);  
                         zval_unicode_to_string(unicopy TSRMLS_CC);  
                         data = &unicopy;  
                 }  
 #endif  
   
                 if (Z_TYPE_PP(data) != IS_STRING) {                  if (Z_TYPE_PP(data) != IS_STRING) {
                         zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "Non-string value passed to Phar::mungServer(), expecting an array of any of these strings: PHP_SELF, REQUEST_URI, SCRIPT_FILENAME, SCRIPT_NAME");                          zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "Non-string value passed to Phar::mungServer(), expecting an array of any of these strings: PHP_SELF, REQUEST_URI, SCRIPT_FILENAME, SCRIPT_NAME");
                         return;                          return;
Line 1054  PHP_METHOD(Phar, mungServer) Line 940  PHP_METHOD(Phar, mungServer)
                 if (Z_STRLEN_PP(data) == sizeof("SCRIPT_FILENAME")-1 && !strncmp(Z_STRVAL_PP(data), "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME")-1)) {                  if (Z_STRLEN_PP(data) == sizeof("SCRIPT_FILENAME")-1 && !strncmp(Z_STRVAL_PP(data), "SCRIPT_FILENAME", sizeof("SCRIPT_FILENAME")-1)) {
                         PHAR_GLOBALS->phar_SERVER_mung_list |= PHAR_MUNG_SCRIPT_FILENAME;                          PHAR_GLOBALS->phar_SERVER_mung_list |= PHAR_MUNG_SCRIPT_FILENAME;
                 }                  }
 #if PHP_MAJOR_VERSION >= 6  
                 if (unicopy) {  
                         zval_ptr_dtor(&unicopy);  
                 }  
 #endif  
         }          }
 }  }
 /* }}} */  /* }}} */
Line 1480  PHP_METHOD(Phar, unlinkArchive) Line 1361  PHP_METHOD(Phar, unlinkArchive)
                 return;                  return;
         }          }
   
        zname = zend_get_executed_filename(TSRMLS_C);        zname = (char*)zend_get_executed_filename(TSRMLS_C);
         zname_len = strlen(zname);          zname_len = strlen(zname);
   
         if (zname_len > 7 && !memcmp(zname, "phar://", 7) && SUCCESS == phar_split_fname(zname, zname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {          if (zname_len > 7 && !memcmp(zname, "phar://", 7) && SUCCESS == phar_split_fname(zname, zname_len, &arch, &arch_len, &entry, &entry_len, 2, 0 TSRMLS_CC)) {
Line 1632  static int phar_build(zend_object_iterator *iter, void Line 1513  static int phar_build(zend_object_iterator *iter, void
                         }                          }
   
                         close_fp = 0;                          close_fp = 0;
                        opened = (char *) estrndup(str, sizeof("[stream]") + 1);                        opened = (char *) estrndup(str, sizeof("[stream]") - 1);
                         goto after_open_fp;                          goto after_open_fp;
                 case IS_OBJECT:                  case IS_OBJECT:
                         if (instanceof_function(Z_OBJCE_PP(value), spl_ce_SplFileInfo TSRMLS_CC)) {                          if (instanceof_function(Z_OBJCE_PP(value), spl_ce_SplFileInfo TSRMLS_CC)) {
Line 2018  PHP_METHOD(Phar, buildFromDirectory) Line 1899  PHP_METHOD(Phar, buildFromDirectory)
         pass.count = 0;          pass.count = 0;
         pass.ret = return_value;          pass.ret = return_value;
         pass.fp = php_stream_fopen_tmpfile();          pass.fp = php_stream_fopen_tmpfile();
           if (pass.fp == NULL) {
                   zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "phar \"%s\" unable to create temporary file", phar_obj->arc.archive->fname);
                   return;
           }
   
         if (phar_obj->arc.archive->is_persistent && FAILURE == phar_copy_on_write(&(phar_obj->arc.archive) TSRMLS_CC)) {          if (phar_obj->arc.archive->is_persistent && FAILURE == phar_copy_on_write(&(phar_obj->arc.archive) TSRMLS_CC)) {
                 zval_ptr_dtor(&iteriter);                  zval_ptr_dtor(&iteriter);
Line 2098  PHP_METHOD(Phar, buildFromIterator) Line 1983  PHP_METHOD(Phar, buildFromIterator)
         pass.ret = return_value;          pass.ret = return_value;
         pass.count = 0;          pass.count = 0;
         pass.fp = php_stream_fopen_tmpfile();          pass.fp = php_stream_fopen_tmpfile();
           if (pass.fp == NULL) {
                   zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "phar \"%s\": unable to create temporary file", phar_obj->arc.archive->fname);
                   return;
           }
   
         if (SUCCESS == spl_iterator_apply(obj, (spl_iterator_apply_func_t) phar_build, (void *) &pass TSRMLS_CC)) {          if (SUCCESS == spl_iterator_apply(obj, (spl_iterator_apply_func_t) phar_build, (void *) &pass TSRMLS_CC)) {
                 phar_obj->arc.archive->ufp = pass.fp;                  phar_obj->arc.archive->ufp = pass.fp;
Line 2201  static int phar_copy_file_contents(phar_entry_info *en Line 2090  static int phar_copy_file_contents(phar_entry_info *en
   
 static zval *phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool compress TSRMLS_DC) /* {{{ */  static zval *phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool compress TSRMLS_DC) /* {{{ */
 {  {
        char *oldname = NULL, *oldpath = NULL;        const char *oldname = NULL;
         char *oldpath = NULL;
         char *basename = NULL, *basepath = NULL;          char *basename = NULL, *basepath = NULL;
         char *newname = NULL, *newpath = NULL;          char *newname = NULL, *newpath = NULL;
         zval *ret, arg1;          zval *ret, arg1;
Line 2429  static zval *phar_convert_to_other(phar_archive_data * Line 2319  static zval *phar_convert_to_other(phar_archive_data *
                 zend_get_hash_value, NULL, 0);                  zend_get_hash_value, NULL, 0);
   
         phar->fp = php_stream_fopen_tmpfile();          phar->fp = php_stream_fopen_tmpfile();
           if (phar->fp == NULL) {
                   zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "unable to create temporary file");
                   return NULL;
           }
         phar->fname = source->fname;          phar->fname = source->fname;
         phar->fname_len = source->fname_len;          phar->fname_len = source->fname_len;
         phar->is_temporary_alias = source->is_temporary_alias;          phar->is_temporary_alias = source->is_temporary_alias;
Line 4296  static int phar_extract_file(zend_bool overwrite, phar Line 4190  static int phar_extract_file(zend_bool overwrite, phar
         php_stream_statbuf ssb;          php_stream_statbuf ssb;
         int len;          int len;
         php_stream *fp;          php_stream *fp;
        char *fullpath, *slash;        char *fullpath;
         const char *slash;
         mode_t mode;          mode_t mode;
   
         if (entry->is_mounted) {          if (entry->is_mounted) {
Line 5033  PHP_METHOD(PharFileInfo, getContent) Line 4928  PHP_METHOD(PharFileInfo, getContent)
   
         phar_seek_efp(link, 0, SEEK_SET, 0, 0 TSRMLS_CC);          phar_seek_efp(link, 0, SEEK_SET, 0, 0 TSRMLS_CC);
         Z_TYPE_P(return_value) = IS_STRING;          Z_TYPE_P(return_value) = IS_STRING;
 #if PHP_MAJOR_VERSION >= 6  
         Z_STRLEN_P(return_value) = php_stream_copy_to_mem(fp, (void **) &(Z_STRVAL_P(return_value)), link->uncompressed_filesize, 0);  
 #else  
         Z_STRLEN_P(return_value) = php_stream_copy_to_mem(fp, &(Z_STRVAL_P(return_value)), link->uncompressed_filesize, 0);          Z_STRLEN_P(return_value) = php_stream_copy_to_mem(fp, &(Z_STRVAL_P(return_value)), link->uncompressed_filesize, 0);
 #endif  
   
         if (!Z_STRVAL_P(return_value)) {          if (!Z_STRVAL_P(return_value)) {
                 Z_STRVAL_P(return_value) = estrndup("", 0);                  Z_STRVAL_P(return_value) = estrndup("", 0);

Removed from v.1.1  
changed lines
  Added in v.1.1.1.4


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