From:             os at sumu dot org
Operating system: Any
PHP version:      5.0.2
PHP Bug Type:     Zend Engine 2 problem
Bug description:  double to long truncation breaks TEA

Description:
------------
The change for DVAL_TO_LVAL macro in 5.0.2 breaks some of my code that
worked in earlier versions.  While it appears that it was relying on
undefined behaviour, it allowed for example  a direct port of Tiny
Encryption Algorithm's reference C code for PHP to work.

(http://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm)

Reproduce code:
---------------
    function tea_encrypt($cycle, $key)
    {
      $a = $cycle[0];
      $b = $cycle[1];
      $sum = 0;
      $delta = (int)0x9e3779b9;
      for($i=0; $i<32; $i++)
      {
        $sum = (int)($sum + $delta);
        $a += (($b << 4) + $key[1]) ^ ($b + $sum) ^ (($b >> 5) +
$key[2]);
        $b += (($a << 4) + $key[3]) ^ ($a + $sum) ^ (($a >> 5) +
$key[4]);
      }
      return array($a, $b);
    }
    $result = tea_encrypt(array(123456, 987654), array(0, 1, 2, 3, 4));
    var_dump(unpack("H*", pack("V*", $result[0], $result[1])));


Expected result:
----------------
PHP versions prior to 5.0.2:
~> php -q tea.php                  
array(1) {
  [1]=>
  string(16) "8f695fc4e6d3c507"
}


Actual result:
--------------
~> ./php-5.0.2/sapi/cli/php -q tea.php
array(1) {
  [1]=>
  string(16) "ffffff7f00000080"
}


-- 
Edit bug report at http://bugs.php.net/?id=30598&edit=1
-- 
Try a CVS snapshot (php4):   http://bugs.php.net/fix.php?id=30598&r=trysnapshot4
Try a CVS snapshot (php5.0): http://bugs.php.net/fix.php?id=30598&r=trysnapshot50
Try a CVS snapshot (php5.1): http://bugs.php.net/fix.php?id=30598&r=trysnapshot51
Fixed in CVS:                http://bugs.php.net/fix.php?id=30598&r=fixedcvs
Fixed in release:            http://bugs.php.net/fix.php?id=30598&r=alreadyfixed
Need backtrace:              http://bugs.php.net/fix.php?id=30598&r=needtrace
Need Reproduce Script:       http://bugs.php.net/fix.php?id=30598&r=needscript
Try newer version:           http://bugs.php.net/fix.php?id=30598&r=oldversion
Not developer issue:         http://bugs.php.net/fix.php?id=30598&r=support
Expected behavior:           http://bugs.php.net/fix.php?id=30598&r=notwrong
Not enough info:             http://bugs.php.net/fix.php?id=30598&r=notenoughinfo
Submitted twice:             http://bugs.php.net/fix.php?id=30598&r=submittedtwice
register_globals:            http://bugs.php.net/fix.php?id=30598&r=globals
PHP 3 support discontinued:  http://bugs.php.net/fix.php?id=30598&r=php3
Daylight Savings:            http://bugs.php.net/fix.php?id=30598&r=dst
IIS Stability:               http://bugs.php.net/fix.php?id=30598&r=isapi
Install GNU Sed:             http://bugs.php.net/fix.php?id=30598&r=gnused
Floating point limitations:  http://bugs.php.net/fix.php?id=30598&r=float
MySQL Configuration Error:   http://bugs.php.net/fix.php?id=30598&r=mysqlcfg

Reply via email to