> -----Original Message-----
> From: Anatol Belski [mailto:anatol....@belski.net]
> Sent: Wednesday, August 19, 2015 12:06 AM
> To: 'Matt Wilmas' <php_li...@realplain.com>; 'Jakub Zelenka' <bu...@php.net>
> Cc: php-...@lists.php.net; 'PHP internals list' <internals@lists.php.net>
> Subject: [PHP-CVS] RE: [PHP-DEV] Re: [PHP-CVS] com php-src: Fix possible
> overflow in openssl_pbkdf2: ext/openssl/openssl.c
> 
> 
> 
> > -----Original Message-----
> > From: Matt Wilmas [mailto:php_li...@realplain.com]
> > Sent: Tuesday, August 18, 2015 11:43 PM
> > To: Jakub Zelenka <bu...@php.net>
> > Cc: Anatol Belski <anatol....@belski.net>; php-...@lists.php.net; PHP
> > internals list <internals@lists.php.net>
> > Subject: [PHP-DEV] Re: [PHP-CVS] com php-src: Fix possible overflow in
> > openssl_pbkdf2: ext/openssl/openssl.c
> >
> > Hi Jakub,
> >
> > ----- Original Message -----
> > From: "Jakub Zelenka"
> > Sent: Tuesday, August 18, 2015
> >
> > > On Tue, Aug 18, 2015 at 9:48 PM, Matt Wilmas
> > > <php_li...@realplain.com>
> > > wrote:
> > >
> > >> Hi Anatol, Jakub,
> > >>
> > >> [...]
> > >>
> > >> The checks with zend_long vars like key_length and iterations are
> > >> impossible when ZEND_LONG_MAX == INT_MAX (most if not all 32-bit, I
> > >> guess).  So those checks should already be removed by the compiler.
> > >>
> > >>
> > > I was thinking that compiler should be able to optimize it out but
> > > not sure about all compilers that we support. It's quite cheap so
> > > can do that anyway but not sure if it's worthy it.
> >
> > If any compiler can't do such a simple optimization, then it's going
> > to be missing many other possible optimizations as well.  Read: Who
> > cares about them. :-)
> >
> > >> But for the size_t ones, would need to check SIZEOF_SIZE_T > 4
> > >> around the macros or such.  Or you could just change in the definition:
> > >>
> > >> if (_max < _var)
> > >>
> > >> to
> > >>
> > >> if (sizeof(_max) < sizeof(_var) && _max < _var)
> > >>
> > >> Which should work fine and allow the compiler to remove it easily,
> > >> without any extra clutter.
> > >>
> > >
> > > we are talking about size_t (unsigned) and int (signed) so not sure
> > > how could compiler optimize it out on 32bit? Did I miss anything?
> >
> > sizeof(INT_literal_or_var) should be equal (not <) to
> > sizeof(size_t_var) on 32-bit (if ints are 32-bit).  So the condition
> > becomes (4 < 4 && _max <
> > _var) and is optimized out.  The signedness doesn't matter, and we
> > don't care in this case, but the compiler can't otherwise know that...
> >
> > Of course on 64-bit, only (_max < _var) remains -- (4 < 8) is removed.
> >
> Ok, got the idea now. But sizeof(size_t) is always > sizeof(zend_long). And 
> for
> signed, still it is simpler and safer to just use an #ifdef around.
> 
Size_t > zend_long I mean :)

Regards

Anatol


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to