Diff for /embedaddon/php/ext/ereg/ereg.c between versions 1.1.1.1 and 1.1.1.3

version 1.1.1.1, 2012/02/21 23:47:54 version 1.1.1.3, 2013/07/22 01:31:40
Line 2 Line 2
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
    | PHP Version 5                                                        |     | PHP Version 5                                                        |
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
   | Copyright (c) 1997-2012 The PHP Group                                |   | Copyright (c) 1997-2013 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 74  static int reg_magic = 0; Line 74  static int reg_magic = 0;
 /* }}} */  /* }}} */
   
 ZEND_DECLARE_MODULE_GLOBALS(ereg)  ZEND_DECLARE_MODULE_GLOBALS(ereg)
   static PHP_GINIT_FUNCTION(ereg);
   static PHP_GSHUTDOWN_FUNCTION(ereg);
   
 /* {{{ Module entry */  /* {{{ Module entry */
 zend_module_entry ereg_module_entry = {  zend_module_entry ereg_module_entry = {
         STANDARD_MODULE_HEADER,          STANDARD_MODULE_HEADER,
         "ereg",          "ereg",
         ereg_functions,          ereg_functions,
         PHP_MINIT(ereg),  
         PHP_MSHUTDOWN(ereg),  
         NULL,          NULL,
         NULL,          NULL,
           NULL,
           NULL,
         PHP_MINFO(ereg),          PHP_MINFO(ereg),
         NO_VERSION_YET,          NO_VERSION_YET,
        STANDARD_MODULE_PROPERTIES        PHP_MODULE_GLOBALS(ereg),
         PHP_GINIT(ereg),
         PHP_GSHUTDOWN(ereg),
         NULL,
         STANDARD_MODULE_PROPERTIES_EX
 };  };
 /* }}} */  /* }}} */
   
   /* {{{ COMPILE_DL_EREG */
   #ifdef COMPILE_DL_EREG
   ZEND_GET_MODULE(ereg)
   #endif
   /* }}} */
   
 /* {{{ ereg_lru_cmp */  /* {{{ ereg_lru_cmp */
 static int ereg_lru_cmp(const void *a, const void *b TSRMLS_DC)  static int ereg_lru_cmp(const void *a, const void *b TSRMLS_DC)
 {  {
Line 124  static int ereg_clean_cache(void *data, void *arg TSRM Line 136  static int ereg_clean_cache(void *data, void *arg TSRM
   
 /* {{{ _php_regcomp  /* {{{ _php_regcomp
  */   */
static int _php_regcomp(regex_t *preg, const char *pattern, int cflags)static int _php_regcomp(regex_t *preg, const char *pattern, int cflags TSRMLS_DC)
 {  {
         int r = 0;          int r = 0;
         int patlen = strlen(pattern);          int patlen = strlen(pattern);
         reg_cache *rc = NULL;          reg_cache *rc = NULL;
         TSRMLS_FETCH();  
   
         if (zend_hash_num_elements(&EREG(ht_rc)) >= EREG_CACHE_SIZE) {          if (zend_hash_num_elements(&EREG(ht_rc)) >= EREG_CACHE_SIZE) {
                 /* easier than dealing with overflow as it happens */                  /* easier than dealing with overflow as it happens */
Line 201  static void _free_ereg_cache(reg_cache *rc)  Line 212  static void _free_ereg_cache(reg_cache *rc) 
 #undef regfree  #undef regfree
 #define regfree(a);  #define regfree(a);
 #undef regcomp  #undef regcomp
#define regcomp(a, b, c) _php_regcomp(a, b, c)#define regcomp(a, b, c) _php_regcomp(a, b, c TSRMLS_CC)
        
static void php_ereg_init_globals(zend_ereg_globals *ereg_globals TSRMLS_DC)/* {{{ PHP_GINIT_FUNCTION
  */
 static PHP_GINIT_FUNCTION(ereg)
 {  {
         zend_hash_init(&ereg_globals->ht_rc, 0, NULL, (void (*)(void *)) _free_ereg_cache, 1);          zend_hash_init(&ereg_globals->ht_rc, 0, NULL, (void (*)(void *)) _free_ereg_cache, 1);
         ereg_globals->lru_counter = 0;          ereg_globals->lru_counter = 0;
 }  }
   /* }}} */
   
static void php_ereg_destroy_globals(zend_ereg_globals *ereg_globals TSRMLS_DC)/* {{{ PHP_GSHUTDOWN_FUNCTION
  */
 static PHP_GSHUTDOWN_FUNCTION(ereg)
 {  {
         zend_hash_destroy(&ereg_globals->ht_rc);          zend_hash_destroy(&ereg_globals->ht_rc);
 }  }
   /* }}} */
   
 PHP_MINIT_FUNCTION(ereg)  
 {  
         ZEND_INIT_MODULE_GLOBALS(ereg, php_ereg_init_globals, php_ereg_destroy_globals);  
         return SUCCESS;  
 }  
   
 PHP_MSHUTDOWN_FUNCTION(ereg)  
 {  
 #ifndef ZTS  
         php_ereg_destroy_globals(&ereg_globals TSRMLS_CC);  
 #endif  
   
         return SUCCESS;  
 }  
   
 PHP_MINFO_FUNCTION(ereg)  PHP_MINFO_FUNCTION(ereg)
 {  {
         php_info_print_table_start();          php_info_print_table_start();
Line 244  PHP_MINFO_FUNCTION(ereg) Line 246  PHP_MINFO_FUNCTION(ereg)
 /* {{{ php_ereg_eprint  /* {{{ php_ereg_eprint
  * php_ereg_eprint - convert error number to name   * php_ereg_eprint - convert error number to name
  */   */
static void php_ereg_eprint(int err, regex_t *re) {static void php_ereg_eprint(int err, regex_t *re TSRMLS_DC) {
         char *buf = NULL, *message = NULL;          char *buf = NULL, *message = NULL;
         size_t len;          size_t len;
         size_t buf_len;          size_t buf_len;
Line 263  static void php_ereg_eprint(int err, regex_t *re) { Line 265  static void php_ereg_eprint(int err, regex_t *re) {
 #endif  #endif
         len = regerror(err, re, NULL, 0);          len = regerror(err, re, NULL, 0);
         if (len) {          if (len) {
                 TSRMLS_FETCH();  
   
                 message = (char *)safe_emalloc((buf_len + len + 2), sizeof(char), 0);                  message = (char *)safe_emalloc((buf_len + len + 2), sizeof(char), 0);
                 if (!message) {                  if (!message) {
                         return; /* fail silently */                          return; /* fail silently */
Line 328  static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int Line 328  static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int
         }          }
   
         if (err) {          if (err) {
                php_ereg_eprint(err, &re);                php_ereg_eprint(err, &re TSRMLS_CC);
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
Line 341  static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int Line 341  static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int
         /* actually execute the regular expression */          /* actually execute the regular expression */
         err = regexec(&re, string, re.re_nsub+1, subs, 0);          err = regexec(&re, string, re.re_nsub+1, subs, 0);
         if (err && err != REG_NOMATCH) {          if (err && err != REG_NOMATCH) {
                php_ereg_eprint(err, &re);                php_ereg_eprint(err, &re TSRMLS_CC);
                 regfree(&re);                  regfree(&re);
                 efree(subs);                  efree(subs);
                 RETURN_FALSE;                  RETURN_FALSE;
Line 400  PHP_FUNCTION(eregi) Line 400  PHP_FUNCTION(eregi)
   
 /* {{{ php_ereg_replace  /* {{{ php_ereg_replace
  * this is the meat and potatoes of regex replacement! */   * this is the meat and potatoes of regex replacement! */
PHPAPI char *php_ereg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended)PHP_EREG_API char *php_ereg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended TSRMLS_DC)
 {  {
         regex_t re;          regex_t re;
         regmatch_t *subs;          regmatch_t *subs;
Line 424  PHPAPI char *php_ereg_replace(const char *pattern, con Line 424  PHPAPI char *php_ereg_replace(const char *pattern, con
   
         err = regcomp(&re, pattern, copts);          err = regcomp(&re, pattern, copts);
         if (err) {          if (err) {
                php_ereg_eprint(err, &re);                php_ereg_eprint(err, &re TSRMLS_CC);
                 return ((char *) -1);                  return ((char *) -1);
         }          }
   
Line 443  PHPAPI char *php_ereg_replace(const char *pattern, con Line 443  PHPAPI char *php_ereg_replace(const char *pattern, con
                 err = regexec(&re, &string[pos], re.re_nsub+1, subs, (pos ? REG_NOTBOL : 0));                  err = regexec(&re, &string[pos], re.re_nsub+1, subs, (pos ? REG_NOTBOL : 0));
   
                 if (err && err != REG_NOMATCH) {                  if (err && err != REG_NOMATCH) {
                        php_ereg_eprint(err, &re);                        php_ereg_eprint(err, &re TSRMLS_CC);
                         efree(subs);                          efree(subs);
                         efree(buf);                          efree(buf);
                         regfree(&re);                          regfree(&re);
Line 474  PHPAPI char *php_ereg_replace(const char *pattern, con Line 474  PHPAPI char *php_ereg_replace(const char *pattern, con
                         if (new_l + 1 > buf_len) {                          if (new_l + 1 > buf_len) {
                                 buf_len = 1 + buf_len + 2 * new_l;                                  buf_len = 1 + buf_len + 2 * new_l;
                                 nbuf = emalloc(buf_len);                                  nbuf = emalloc(buf_len);
                                strncpy(nbuf, buf, buf_len-1);                                strncpy(nbuf, buf, buf_len - 1);
                                 nbuf[buf_len - 1] = '\0';                                  nbuf[buf_len - 1] = '\0';
                                 efree(buf);                                  efree(buf);
                                 buf = nbuf;                                  buf = nbuf;
Line 487  PHPAPI char *php_ereg_replace(const char *pattern, con Line 487  PHPAPI char *php_ereg_replace(const char *pattern, con
                         walkbuf = &buf[tmp + subs[0].rm_so];                          walkbuf = &buf[tmp + subs[0].rm_so];
                         walk = replace;                          walk = replace;
                         while (*walk) {                          while (*walk) {
                                if ('\\' == *walk && isdigit((unsigned char)walk[1]) && ((unsigned char)walk[1]) - '0' <= (int)re.re_nsub) {                                if ('\\' == *walk && isdigit((unsigned char)walk[1]) && (unsigned char)walk[1] - '0' <= (int)re.re_nsub) {
                                         if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1                                          if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1
                                                 /* this next case shouldn't happen. it does. */                                                  /* this next case shouldn't happen. it does. */
                                                 && subs[walk[1] - '0'].rm_so <= subs[walk[1] - '0'].rm_eo) {                                                  && subs[walk[1] - '0'].rm_so <= subs[walk[1] - '0'].rm_eo) {
Line 594  static void php_do_ereg_replace(INTERNAL_FUNCTION_PARA Line 594  static void php_do_ereg_replace(INTERNAL_FUNCTION_PARA
         }          }
   
         /* do the actual work */          /* do the actual work */
        ret = php_ereg_replace(pattern, replace, string, icase, 1);        ret = php_ereg_replace(pattern, replace, string, icase, 1 TSRMLS_CC);
         if (ret == (char *) -1) {          if (ret == (char *) -1) {
                 RETVAL_FALSE;                  RETVAL_FALSE;
         } else {          } else {
Line 648  static void php_split(INTERNAL_FUNCTION_PARAMETERS, in Line 648  static void php_split(INTERNAL_FUNCTION_PARAMETERS, in
   
         err = regcomp(&re, spliton, REG_EXTENDED | copts);          err = regcomp(&re, spliton, REG_EXTENDED | copts);
         if (err) {          if (err) {
                php_ereg_eprint(err, &re);                php_ereg_eprint(err, &re TSRMLS_CC);
                 RETURN_FALSE;                  RETURN_FALSE;
         }          }
   
Line 692  static void php_split(INTERNAL_FUNCTION_PARAMETERS, in Line 692  static void php_split(INTERNAL_FUNCTION_PARAMETERS, in
   
         /* see if we encountered an error */          /* see if we encountered an error */
         if (err && err != REG_NOMATCH) {          if (err && err != REG_NOMATCH) {
                php_ereg_eprint(err, &re);                php_ereg_eprint(err, &re TSRMLS_CC);
                 regfree(&re);                  regfree(&re);
                 zend_hash_destroy(Z_ARRVAL_P(return_value));                  zend_hash_destroy(Z_ARRVAL_P(return_value));
                 efree(Z_ARRVAL_P(return_value));                  efree(Z_ARRVAL_P(return_value));
Line 728  PHP_FUNCTION(spliti) Line 728  PHP_FUNCTION(spliti)
   
 /* {{{ proto string sql_regcase(string string)  /* {{{ proto string sql_regcase(string string)
    Make regular expression for case insensitive match */     Make regular expression for case insensitive match */
PHPAPI PHP_FUNCTION(sql_regcase)PHP_EREG_API PHP_FUNCTION(sql_regcase)
 {  {
         char *string, *tmp;          char *string, *tmp;
         int string_len;          int string_len;

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


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