Hi Gustavo,

Can you review the definition of 
http://www.php.net/manual/en/splminheap.compare.php ?
I believe the testcase should have the operands reversed to satisfy this 
definition
and so the bug was bogus.

Chris



On 12/21/2010 09:29 AM, Gustavo André dos Santos Lopes wrote:
cataphract                               Tue, 21 Dec 2010 17:29:14 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=306542

Log:
- Fixed bug #53588 (SplMinHeap bad sorting with custom compare
   function).

Bug: http://bugs.php.net/53588 (Assigned) SplMinHeap bad insert sort

Changed paths:
     U   php/php-src/branches/PHP_5_3/NEWS
     U   php/php-src/branches/PHP_5_3/ext/spl/spl_heap.c
     A   php/php-src/branches/PHP_5_3/ext/spl/tests/bug53588.phpt
     U   php/php-src/trunk/ext/spl/spl_heap.c
     A   php/php-src/trunk/ext/spl/tests/bug53588.phpt

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2010-12-21 16:05:40 UTC (rev 306541)
+++ php/php-src/branches/PHP_5_3/NEWS   2010-12-21 17:29:14 UTC (rev 306542)
@@ -70,6 +70,8 @@
  - SPL extension:
    . Fixed bug #53515 (property_exists incorrect on ArrayObject null and 0
      values). (Felipe)
+  . Fixed bug #53588 (SplMinHeap bad sorting with custom compare function).
+    (Gustavo)

  - SQLite extension:
    . Fixed memory leaked introduced by the NULL poisoning patch (Mateusz 
Kocielski, Pierre)

Modified: php/php-src/branches/PHP_5_3/ext/spl/spl_heap.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/spl/spl_heap.c     2010-12-21 16:05:40 UTC 
(rev 306541)
+++ php/php-src/branches/PHP_5_3/ext/spl/spl_heap.c     2010-12-21 17:29:14 UTC 
(rev 306542)
@@ -176,7 +176,7 @@
                spl_heap_object *heap_object = 
(spl_heap_object*)zend_object_store_get_object((zval *)object TSRMLS_CC);
                if (heap_object->fptr_cmp) {
                        long lval = 0;
-                       if (spl_ptr_heap_cmp_cb_helper((zval *)object, heap_object, 
(zval *)a, (zval *)b,&lval TSRMLS_CC) == FAILURE) {
+                       if (spl_ptr_heap_cmp_cb_helper((zval *)object, heap_object, 
(zval *)b, (zval *)a,&lval TSRMLS_CC) == FAILURE) {
                                /* exception or call failure */
                                return 0;
                        }

Added: php/php-src/branches/PHP_5_3/ext/spl/tests/bug53588.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/spl/tests/bug53588.phpt                    
        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/spl/tests/bug53588.phpt    2010-12-21 
17:29:14 UTC (rev 306542)
@@ -0,0 +1,23 @@
+--TEST--
+Bug #53588 (SplMinHeap bad sorting with custom compare function)
+--FILE--
+<?php
+class MySimpleHeap extends SplMinHeap{
+    public function  compare( $value1, $value2 ){
+        return ( $value1 - $value2 );
+    }
+}
+
+$obj = new MySimpleHeap();
+$obj->insert( 8 );
+$obj->insert( 0 );
+$obj->insert( 4 );
+
+foreach( $obj as $number ) {
+    echo $number, "\n";
+}
+--EXPECT--
+0
+4
+8
+

Modified: php/php-src/trunk/ext/spl/spl_heap.c
===================================================================
--- php/php-src/trunk/ext/spl/spl_heap.c        2010-12-21 16:05:40 UTC (rev 
306541)
+++ php/php-src/trunk/ext/spl/spl_heap.c        2010-12-21 17:29:14 UTC (rev 
306542)
@@ -176,7 +176,7 @@
                spl_heap_object *heap_object = 
(spl_heap_object*)zend_object_store_get_object((zval *)object TSRMLS_CC);
                if (heap_object->fptr_cmp) {
                        long lval = 0;
-                       if (spl_ptr_heap_cmp_cb_helper((zval *)object, heap_object, 
(zval *)a, (zval *)b,&lval TSRMLS_CC) == FAILURE) {
+                       if (spl_ptr_heap_cmp_cb_helper((zval *)object, heap_object, 
(zval *)b, (zval *)a,&lval TSRMLS_CC) == FAILURE) {
                                /* exception or call failure */
                                return 0;
                        }

Added: php/php-src/trunk/ext/spl/tests/bug53588.phpt
===================================================================
--- php/php-src/trunk/ext/spl/tests/bug53588.phpt                               
(rev 0)
+++ php/php-src/trunk/ext/spl/tests/bug53588.phpt       2010-12-21 17:29:14 UTC 
(rev 306542)
@@ -0,0 +1,23 @@
+--TEST--
+Bug #53588 (SplMinHeap bad sorting with custom compare function)
+--FILE--
+<?php
+class MySimpleHeap extends SplMinHeap{
+    public function  compare( $value1, $value2 ){
+        return ( $value1 - $value2 );
+    }
+}
+
+$obj = new MySimpleHeap();
+$obj->insert( 8 );
+$obj->insert( 0 );
+$obj->insert( 4 );
+
+foreach( $obj as $number ) {
+    echo $number, "\n";
+}
+--EXPECT--
+0
+4
+8
+



--
Email: christopher.jo...@oracle.com
Tel:  +1 650 506 8630
Blog:  http://blogs.oracle.com/opal/

--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to