]> granicus.if.org Git - php/commitdiff
Prevent memcmp() result truncation
authorBob Weinand <bobwei9@hotmail.com>
Tue, 13 Oct 2015 13:51:23 +0000 (15:51 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Tue, 13 Oct 2015 13:51:23 +0000 (15:51 +0200)
This fixes reported issues with sapi/phpdbg/tests/watch_001.phpt

sapi/phpdbg/phpdbg_watch.c

index 06a0bbefe81ff8c80628c163e7a0e2fb5ed13370..4cf3acbb6c35784ff361a5b110faaf2ab21233dc 100644 (file)
@@ -964,7 +964,7 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump) {
 
                        switch (watch->type) {
                                case WATCH_ON_ZVAL:
-                                       do_break = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* value + typeinfo */);
+                                       do_break = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* value + typeinfo */) != 0;
                                        if (!do_break) {
                                                goto end;
                                        }
@@ -976,7 +976,7 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump) {
                                        }
                                        break;
                                case WATCH_ON_REFCOUNTED:
-                                       do_break = memcmp(oldPtr, watch->addr.ref, sizeof(uint32_t) /* no zend_refcounted metadata info */);
+                                       do_break = memcmp(oldPtr, watch->addr.ref, sizeof(uint32_t) /* no zend_refcounted metadata info */) != 0;
                                        if (!do_break) {
                                                goto end;
                                        }
@@ -999,7 +999,7 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump) {
 
                        switch (watch->type) {
                                case WATCH_ON_ZVAL: {
-                                       int show_value = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* no metadata info */);
+                                       zend_bool show_value = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* no metadata info */) != 0;
 
                                        if ((watch->flags & PHPDBG_WATCH_NORMAL) && (removed || show_value)) {
 /* TODO: Merge with refcounting watches, store if watched ref value is to be dropped etc. [for example: manually increment refcount transparently for displaying and drop it if it decrements to 1] */