From 57506ae00f7e00ea84801b763975b72fcce58111 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Fri, 18 Nov 2016 00:11:39 +0000 Subject: [PATCH] Fix signame usage in qual_signal Do not assume that the string returned by signame starts with "SIG" prefix, this is not always the case. * syscall.c (qual_signal): Skip signame return value when it does not have "SIG" prefix. --- syscall.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/syscall.c b/syscall.c index 02a82e6a..2e9b2e34 100644 --- a/syscall.c +++ b/syscall.c @@ -677,22 +677,27 @@ qual_fault(const char *const s, const unsigned int bitflag, const int not) static int qual_signal(const char *s, const unsigned int bitflag, const int not) { - unsigned int i; + int i; if (*s >= '0' && *s <= '9') { - int signo = string_to_uint_upto(s, 255); - if (signo < 0) + i = string_to_uint_upto(s, 255); + if (i < 0) return -1; - qualify_one(signo, bitflag, not, -1, NULL); + qualify_one(i, bitflag, not, -1, NULL); return 0; } if (strncasecmp(s, "SIG", 3) == 0) s += 3; - for (i = 0; i <= NSIG; i++) { - if (strcasecmp(s, signame(i) + 3) == 0) { - qualify_one(i, bitflag, not, -1, NULL); - return 0; - } + for (i = 0; i <= NSIG; ++i) { + const char *name = signame(i); + if (strncasecmp(name, "SIG", 3) != 0) + continue; + name += 3; + + if (strcasecmp(name, s) != 0) + continue; + qualify_one(i, bitflag, not, -1, NULL); + return 0; } return -1; } -- 2.40.0