Ver Fonte

Fix out-of-bounds error in strsignal

Jason Hansel há 5 anos atrás
pai
commit
a5409ecd36

+ 3 - 1
src/header/string/mod.rs

@@ -366,7 +366,9 @@ pub unsafe extern "C" fn strrchr(s: *const c_char, c: c_int) -> *mut c_char {
 
 #[no_mangle]
 pub unsafe extern "C" fn strsignal(sig: c_int) -> *const c_char {
-    signal::_signal_strings[sig as usize].as_ptr() as *const c_char
+    signal::_signal_strings.get(sig as usize).unwrap_or(
+        &signal::_signal_strings[0] // Unknown signal message
+    ).as_ptr() as *const c_char
 }
 
 #[no_mangle]

+ 1 - 0
tests/Makefile

@@ -61,6 +61,7 @@ EXPECT_NAMES=\
 	string/strstr \
 	string/strtok \
 	string/strtok_r \
+	string/strsignal \
 	strings \
 	sys_epoll/epoll \
 	time/asctime \

+ 0 - 0
tests/expected/string/strsignal.stderr


+ 1 - 0
tests/expected/string/strsignal.stdout

@@ -0,0 +1 @@
+# strsignal #

+ 28 - 0
tests/string/strsignal.c

@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+
+#include "test_helpers.h"
+
+int main(void) {
+    puts("# strsignal #");
+    char *x = strsignal(SIGHUP);
+    int res;
+    if (strcmp(x, "Hangup")) {
+        printf("Incorrect strsignal (1), found: .%s.\n", x);
+        exit(EXIT_FAILURE);
+    }
+    x = strsignal(0); 
+    if (strcmp(x, "Unknown signal")) {
+        printf("Incorrect strsignal (2), found: .%s.\n", x);
+        exit(EXIT_FAILURE);
+    }
+    x = strsignal(100); 
+    if (strcmp(x, "Unknown signal")) {
+        printf("Incorrect strsignal (3), found: .%s.\n", x);
+        exit(EXIT_FAILURE);
+    }
+
+
+}