From 424aa69893d7e58d8d7f1ecf4a72dc0af68530e0 Mon Sep 17 00:00:00 2001 From: take-cheeze Date: Mon, 2 Jul 2018 21:09:35 +0900 Subject: [PATCH] Fix global buffer overflow in signal.c. --- signal.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/signal.c b/signal.c index 7b725d8268dd..4cfeb81d7c88 100644 --- a/signal.c +++ b/signal.c @@ -206,6 +206,7 @@ signm2signo(VALUE *sig_ptr, int negative, int exit, int *prefix_ptr) const char *nm; long len; int prefix = 0; + size_t left_len; if (RB_SYMBOL_P(vsig)) { *sig_ptr = vsig = rb_sym2str(vsig); @@ -258,8 +259,10 @@ signm2signo(VALUE *sig_ptr, int negative, int exit, int *prefix_ptr) } if (prefix_ptr) *prefix_ptr = prefix; + left_len = len - prefix; for (sigs = siglist + !exit; sigs->signm; sigs++) { - if (memcmp(sigs->signm, nm + prefix, len - prefix) == 0 && + if (left_len != strlen(sigs->signm)) { continue; } + if (memcmp(sigs->signm, nm + prefix, left_len) == 0 && sigs->signm[len - prefix] == '\0') { return negative ? -sigs->signo : sigs->signo; }