From 87bdc2b02b110288c7107316da2619ce62b68772 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Mon, 5 Aug 2019 18:59:48 +0200 Subject: [PATCH] fix dumping semaphores by name There was no check for strtoul success or failure (it returns 0 on failure but that is also a valid conversion result). Detect if endptr has been advanced instead (meaning there were some parsed characters in strtoul so the argument at least starts with a number) Change-Id: Ieefbd57a250ddcdb9362094389151c2a432e4c73 Reviewed-on: https://review.haiku-os.org/c/1683 Reviewed-by: Rene Gollent --- src/system/kernel/sem.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/system/kernel/sem.cpp b/src/system/kernel/sem.cpp index fb8f3c4488..3775583f11 100644 --- a/src/system/kernel/sem.cpp +++ b/src/system/kernel/sem.cpp @@ -231,20 +231,23 @@ dump_sem_info(int argc, char **argv) return 0; } - num = strtoul(argv[1], NULL, 0); + char* endptr; + num = strtoul(argv[1], &endptr, 0); - if (IS_KERNEL_ADDRESS(num)) { - dump_sem((struct sem_entry *)num); - return 0; - } else if (num >= 0) { - uint32 slot = num % sMaxSems; - if (sSems[slot].id != (int)num) { - kprintf("sem %ld (%#lx) doesn't exist!\n", num, num); + if (endptr != argv[1]) { + if (IS_KERNEL_ADDRESS(num)) { + dump_sem((struct sem_entry *)num); + return 0; + } else { + uint32 slot = num % sMaxSems; + if (sSems[slot].id != (int)num) { + kprintf("sem %ld (%#lx) doesn't exist!\n", num, num); + return 0; + } + + dump_sem(&sSems[slot]); return 0; } - - dump_sem(&sSems[slot]); - return 0; } // walk through the sem list, trying to match name