summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-04-22 09:32:06 +0200
committerThomas Haller <thaller@redhat.com>2020-04-22 09:49:45 +0200
commitb2a5b179fd131161925a7f2bea1c6b0a973b1a8e (patch)
tree025513410c79ed8c68f5b5b02fa45b95047c20ce
parent95ccfdb69adbd20b022c9aa34175b3b56728cda2 (diff)
downloadNetworkManager-b2a5b179fd131161925a7f2bea1c6b0a973b1a8e.tar.gz
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.
-rw-r--r--src/platform/nmp-object.c8
1 files 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);