From aa759765c55d46ac34e69adebbfb9d39c4ab7a3c Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 22 Apr 2020 09:32:06 +0200 Subject: [PATCH] platform: avoid undefined behavior comparing unrelated pointers in nmp_object_id_cmp() Pointers cannot in general be compared directly. Cast to an int first to avoid the undefined behavior. (cherry picked from commit b2a5b179fd131161925a7f2bea1c6b0a973b1a8e) --- src/platform/nmp-object.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/platform/nmp-object.c b/src/platform/nmp-object.c index 541211cdc1..a6aa5e2239 100644 --- a/src/platform/nmp-object.c +++ b/src/platform/nmp-object.c @@ -1405,15 +1405,15 @@ nmp_object_id_cmp (const NMPObject *obj1, const NMPObject *obj2) nm_assert (klass2); NM_CMP_DIRECT (klass->obj_type, klass2->obj_type); /* resort to pointer comparison */ - if (klass < klass2) - return -1; - return 1; + NM_CMP_DIRECT_PTR (klass, klass2); + return 0; } if (!klass->cmd_plobj_id_cmp) { /* the klass doesn't implement ID cmp(). That means, different objects * never compare equal, but the cmp() according to their pointer value. */ - return (obj1 < obj2) ? -1 : 1; + NM_CMP_DIRECT_PTR (obj1, obj2); + return 0; } return klass->cmd_plobj_id_cmp (&obj1->object, &obj2->object);