Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:26663 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 44114 invoked by uid 1010); 17 Nov 2006 17:56:40 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 44091 invoked from network); 17 Nov 2006 17:56:40 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 17 Nov 2006 17:56:40 -0000 X-Host-Fingerprint: 84.150.121.32 p54967920.dip.t-dialin.net Received: from [84.150.121.32] ([84.150.121.32:19633] helo=localhost.localdomain) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 5E/FE-37771-7D7FD554 for ; Fri, 17 Nov 2006 12:56:39 -0500 To: internals@lists.php.net Date: Fri, 17 Nov 2006 18:56:37 +0100 User-Agent: Pan/0.14.2.91 (As She Crawled Across the Table (Debian GNU/Linux)) Message-ID: References: Reply-To: dsp@php.net MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit X-Posted-By: 84.150.121.32 Subject: Re: [PATCH] For Bug #38770 From: dsp@php.net (David Soria Parra) I also attached the patch against PHP_5_2 CVS Index: ext/standard/pack.c =================================================================== RCS file: /repository/php-src/ext/standard/pack.c,v retrieving revision 1.57.2.5 diff -u -r1.57.2.5 pack.c --- ext/standard/pack.c 26 Feb 2006 10:49:50 -0000 1.57.2.5 +++ ext/standard/pack.c 17 Nov 2006 17:54:24 -0000 @@ -756,11 +756,15 @@ long v; int issigned = 0; - if (type == 'i') { issigned = input[inputpos + (machine_little_endian ? (sizeof(int) - 1) : 0)] & 0x80; + + if (sizeof(long) > sizeof(int) && issigned) { + v = ~INT_MAX; + } else { + v = 0; } - v = php_unpack(&input[inputpos], sizeof(int), issigned, int_map); + v |= php_unpack(&input[inputpos], sizeof(int), (type=='i')?issigned:0, int_map); add_assoc_long(return_value, n, v); break; } @@ -781,7 +785,14 @@ map = little_endian_long_map; } - v = php_unpack(&input[inputpos], 4, issigned, map); + if (sizeof(long) > 4 && (input[inputpos + map[3]] & 0x80) == 0x80) { + v = ~INT_MAX; + } else { + v = 0; + } + + v |= php_unpack(&input[inputpos], 4, issigned, map); + add_assoc_long(return_value, n, v); break; }