Diff for /embedaddon/php/Zend/zend_alloc.c between versions 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2012/05/29 12:34:35 version 1.1.1.3, 2013/07/22 01:32:15
Line 2 Line 2
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
    | Zend Engine                                                          |     | Zend Engine                                                          |
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
   | Copyright (c) 1998-2012 Zend Technologies Ltd. (http://www.zend.com) |   | Copyright (c) 1998-2013 Zend Technologies Ltd. (http://www.zend.com) |
    +----------------------------------------------------------------------+     +----------------------------------------------------------------------+
    | This source file is subject to version 2.00 of the Zend license,     |     | This source file is subject to version 2.00 of the Zend 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 664  static void *_zend_mm_realloc_int(zend_mm_heap *heap,  Line 664  static void *_zend_mm_realloc_int(zend_mm_heap *heap, 
   
 static inline unsigned int zend_mm_high_bit(size_t _size)  static inline unsigned int zend_mm_high_bit(size_t _size)
 {  {
#if defined(__GNUC__) && defined(i386)#if defined(__GNUC__) && (defined(__native_client__) || defined(i386))
         unsigned int n;          unsigned int n;
   
         __asm__("bsrl %1,%0\n\t" : "=r" (n) : "rm"  (_size));          __asm__("bsrl %1,%0\n\t" : "=r" (n) : "rm"  (_size));
Line 672  static inline unsigned int zend_mm_high_bit(size_t _si Line 672  static inline unsigned int zend_mm_high_bit(size_t _si
 #elif defined(__GNUC__) && defined(__x86_64__)  #elif defined(__GNUC__) && defined(__x86_64__)
         unsigned long n;          unsigned long n;
   
        __asm__("bsrq %1,%0\n\t" : "=r" (n) : "rm"  (_size));        __asm__("bsr %1,%0\n\t" : "=r" (n) : "rm"  (_size));
         return (unsigned int)n;          return (unsigned int)n;
 #elif defined(_MSC_VER) && defined(_M_IX86)  #elif defined(_MSC_VER) && defined(_M_IX86)
         __asm {          __asm {
Line 690  static inline unsigned int zend_mm_high_bit(size_t _si Line 690  static inline unsigned int zend_mm_high_bit(size_t _si
   
 static inline unsigned int zend_mm_low_bit(size_t _size)  static inline unsigned int zend_mm_low_bit(size_t _size)
 {  {
#if defined(__GNUC__) && defined(i386)#if defined(__GNUC__) && (defined(__native_client__) || defined(i386))
         unsigned int n;          unsigned int n;
   
         __asm__("bsfl %1,%0\n\t" : "=r" (n) : "rm"  (_size));          __asm__("bsfl %1,%0\n\t" : "=r" (n) : "rm"  (_size));
Line 698  static inline unsigned int zend_mm_low_bit(size_t _siz Line 698  static inline unsigned int zend_mm_low_bit(size_t _siz
 #elif defined(__GNUC__) && defined(__x86_64__)  #elif defined(__GNUC__) && defined(__x86_64__)
         unsigned long n;          unsigned long n;
   
        __asm__("bsfq %1,%0\n\t" : "=r" (n) : "rm"  (_size));        __asm__("bsf %1,%0\n\t" : "=r" (n) : "rm"  (_size));
         return (unsigned int)n;          return (unsigned int)n;
 #elif defined(_MSC_VER) && defined(_M_IX86)  #elif defined(_MSC_VER) && defined(_M_IX86)
         __asm {          __asm {
                 bsf eax, _size                  bsf eax, _size
   }        }
 #else  #else
         static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0};          static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0};
         unsigned int n;          unsigned int n;
Line 2454  ZEND_API size_t _zend_mem_block_size(void *ptr TSRMLS_ Line 2454  ZEND_API size_t _zend_mem_block_size(void *ptr TSRMLS_
         return _zend_mm_block_size(AG(mm_heap), ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);          return _zend_mm_block_size(AG(mm_heap), ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
 }  }
   
#if defined(__GNUC__) && defined(i386)#if defined(__GNUC__) && (defined(__native_client__) || defined(i386))
   
 static inline size_t safe_address(size_t nmemb, size_t size, size_t offset)  static inline size_t safe_address(size_t nmemb, size_t size, size_t offset)
 {  {
Line 2481  static inline size_t safe_address(size_t nmemb, size_t Line 2481  static inline size_t safe_address(size_t nmemb, size_t
         size_t res = nmemb;          size_t res = nmemb;
         unsigned long overflow = 0;          unsigned long overflow = 0;
   
        __asm__ ("mulq %3\n\taddq %4,%0\n\tadcq %1,%1"#ifdef __ILP32__ /* x32 */
 # define LP_SUFF "l"
 #else /* amd64 */
 # define LP_SUFF "q"
 #endif
 
         __asm__ ("mul" LP_SUFF  " %3\n\t"
                  "add %4,%0\n\t"
                  "adc %1,%1"
              : "=&a"(res), "=&d" (overflow)               : "=&a"(res), "=&d" (overflow)
              : "%0"(res),               : "%0"(res),
                "rm"(size),                 "rm"(size),
                "rm"(offset));                 "rm"(offset));
   
   #undef LP_SUFF
   
         if (UNEXPECTED(overflow)) {          if (UNEXPECTED(overflow)) {
                 zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset);                  zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset);

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


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