From 3486675e00d530b5efde4072b34f708bbe236fd4 Mon Sep 17 00:00:00 2001 From: Uchio Kondo Date: Tue, 28 Apr 2020 01:33:50 +0900 Subject: Test mruby-io in tmpdir when AF_UNIX cannot be created on cwd --- mrbgems/mruby-io/test/mruby_io_test.c | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 44b8acebb..ac6ab530a 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -1,6 +1,7 @@ #include #include #include +#include #if defined(_WIN32) || defined(_WIN64) @@ -57,6 +58,7 @@ mkdtemp(char *temp) #include #include +#include #include "mruby.h" #include "mruby/array.h" @@ -65,9 +67,48 @@ mkdtemp(char *temp) #include "mruby/variable.h" #include +int wd_save; +int socket_available_p; + +static int mrb_io_socket_abailable() +{ + int fd, retval = 1; + struct sockaddr_un sun0; + char socketname[] = "tmp.mruby-io-socket-ok.XXXXXXXX"; + if (!(fd = mkstemp(socketname))) { + retval = 0; + goto sock_test_out; + } + unlink(socketname); + close(fd); + fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd == -1) { + retval = 0; + goto sock_test_out; + } + sun0.sun_family = AF_UNIX; + snprintf(sun0.sun_path, sizeof(sun0.sun_path), "%s", socketname); + if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { + retval = 0; + } +sock_test_out: + close(fd); + return retval; +} + static mrb_value mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) { + if(!(socket_available_p = mrb_io_socket_abailable())) { + char *tmpdir; + wd_save = open(".", O_DIRECTORY); + tmpdir = getenv("TMPDIR"); + if (tmpdir) + assert(!chdir(tmpdir)); + else + assert(!chdir("/tmp")); + } + char rfname[] = "tmp.mruby-io-test-r.XXXXXXXX"; char wfname[] = "tmp.mruby-io-test-w.XXXXXXXX"; char symlinkname[] = "tmp.mruby-io-test-l.XXXXXXXX"; @@ -176,6 +217,11 @@ mrb_io_test_io_cleanup(mrb_state *mrb, mrb_value self) mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_socketname"), mrb_nil_value()); mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_msg"), mrb_nil_value()); + if(!socket_available_p) { + assert(!fchdir(wd_save)); + close(wd_save); + } + return mrb_nil_value(); } -- cgit v1.2.3 From 4b81bce48d2e489eb1d1ffb9f4b90ddb7f10ae62 Mon Sep 17 00:00:00 2001 From: Uchio Kondo Date: Tue, 28 Apr 2020 01:45:46 +0900 Subject: Follow C90 style --- mrbgems/mruby-io/test/mruby_io_test.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index ac6ab530a..2026dbd45 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -99,16 +99,6 @@ sock_test_out: static mrb_value mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) { - if(!(socket_available_p = mrb_io_socket_abailable())) { - char *tmpdir; - wd_save = open(".", O_DIRECTORY); - tmpdir = getenv("TMPDIR"); - if (tmpdir) - assert(!chdir(tmpdir)); - else - assert(!chdir("/tmp")); - } - char rfname[] = "tmp.mruby-io-test-r.XXXXXXXX"; char wfname[] = "tmp.mruby-io-test-w.XXXXXXXX"; char symlinkname[] = "tmp.mruby-io-test-l.XXXXXXXX"; @@ -123,6 +113,16 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) struct sockaddr_un sun0; #endif + if(!(socket_available_p = mrb_io_socket_abailable())) { + char *tmpdir; + wd_save = open(".", O_DIRECTORY); + tmpdir = getenv("TMPDIR"); + if (tmpdir) + assert(!chdir(tmpdir)); + else + assert(!chdir("/tmp")); + } + mask = umask(077); fd0 = mkstemp(rfname); fd1 = mkstemp(wfname); -- cgit v1.2.3 From 508ac2030e1f1218d7a6b4e140c0d7bf8c7b7dc3 Mon Sep 17 00:00:00 2001 From: Uchio Kondo Date: Tue, 28 Apr 2020 01:49:39 +0900 Subject: Skip socket check on windows --- mrbgems/mruby-io/test/mruby_io_test.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 2026dbd45..1cbb1057c 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -70,6 +70,7 @@ mkdtemp(char *temp) int wd_save; int socket_available_p; +#if !defined(_WIN32) && !defined(_WIN64) static int mrb_io_socket_abailable() { int fd, retval = 1; @@ -95,6 +96,7 @@ sock_test_out: close(fd); return retval; } +#endif static mrb_value mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) @@ -111,7 +113,6 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) #if !defined(_WIN32) && !defined(_WIN64) int fd2, fd3; struct sockaddr_un sun0; -#endif if(!(socket_available_p = mrb_io_socket_abailable())) { char *tmpdir; @@ -122,6 +123,7 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) else assert(!chdir("/tmp")); } +#endif mask = umask(077); fd0 = mkstemp(rfname); @@ -217,10 +219,12 @@ mrb_io_test_io_cleanup(mrb_state *mrb, mrb_value self) mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_socketname"), mrb_nil_value()); mrb_gv_set(mrb, mrb_intern_cstr(mrb, "$mrbtest_io_msg"), mrb_nil_value()); +#if !defined(_WIN32) && !defined(_WIN64) if(!socket_available_p) { assert(!fchdir(wd_save)); close(wd_save); } +#endif return mrb_nil_value(); } -- cgit v1.2.3 From 6e13467ce8d59334639045a710ddd93193d643e5 Mon Sep 17 00:00:00 2001 From: Uchio Kondo Date: Tue, 28 Apr 2020 01:52:56 +0900 Subject: Fix typo and include location --- mrbgems/mruby-io/test/mruby_io_test.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 1cbb1057c..2200b750b 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -1,7 +1,6 @@ #include #include #include -#include #if defined(_WIN32) || defined(_WIN64) @@ -54,11 +53,12 @@ mkdtemp(char *temp) #include #include #include + #include + #include #endif #include #include -#include #include "mruby.h" #include "mruby/array.h" @@ -71,7 +71,7 @@ int wd_save; int socket_available_p; #if !defined(_WIN32) && !defined(_WIN64) -static int mrb_io_socket_abailable() +static int mrb_io_socket_available() { int fd, retval = 1; struct sockaddr_un sun0; @@ -114,7 +114,7 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) int fd2, fd3; struct sockaddr_un sun0; - if(!(socket_available_p = mrb_io_socket_abailable())) { + if(!(socket_available_p = mrb_io_socket_available())) { char *tmpdir; wd_save = open(".", O_DIRECTORY); tmpdir = getenv("TMPDIR"); -- cgit v1.2.3 From d464fe50033084df6f171956d2fa051e4448c22f Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 18:13:43 +0900 Subject: Remove the temporary file from the `AF_UNIX` socket test; #4981 --- mrbgems/mruby-io/test/mruby_io_test.c | 1 + 1 file changed, 1 insertion(+) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 2200b750b..18635fb55 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -93,6 +93,7 @@ static int mrb_io_socket_available() retval = 0; } sock_test_out: + unlink(socketname); close(fd); return retval; } -- cgit v1.2.3 From 9f4b5227fe21ad778d3b408c12315168307ae25f Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 18:30:50 +0900 Subject: Avoid `snprintf` in `mruby-io` test; ref #4981 --- mrbgems/mruby-io/test/mruby_io_test.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 18635fb55..36872e7b7 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -77,22 +77,21 @@ static int mrb_io_socket_available() struct sockaddr_un sun0; char socketname[] = "tmp.mruby-io-socket-ok.XXXXXXXX"; if (!(fd = mkstemp(socketname))) { - retval = 0; goto sock_test_out; } unlink(socketname); close(fd); fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd == -1) { - retval = 0; goto sock_test_out; } sun0.sun_family = AF_UNIX; - snprintf(sun0.sun_path, sizeof(sun0.sun_path), "%s", socketname); + strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path)); if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { retval = 0; } sock_test_out: + retval = 0; unlink(socketname); close(fd); return retval; @@ -181,7 +180,7 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) mrb_raise(mrb, E_RUNTIME_ERROR, "can't make a socket"); } sun0.sun_family = AF_UNIX; - snprintf(sun0.sun_path, sizeof(sun0.sun_path), "%s", socketname); + strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path)); if (bind(fd3, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { mrb_raisef(mrb, E_RUNTIME_ERROR, "can't bind AF_UNIX socket to %s: %d", sun0.sun_path, -- cgit v1.2.3 From 7dc0fe66c7d0356211d48076e22028987bbbc0a9 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 22:32:12 +0900 Subject: Add `#include ` on all platforms for `strncpy`; #4981 --- mrbgems/mruby-io/test/mruby_io_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 36872e7b7..e023b1904 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -1,6 +1,7 @@ #include #include #include +#include #if defined(_WIN32) || defined(_WIN64) @@ -8,7 +9,6 @@ #include #include #include -#include #include #include -- cgit v1.2.3 From b652a4ff1426d8832f2678e7a00de43b3b0aea4c Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 22:33:32 +0900 Subject: Fixed wrong condition in #4981. --- mrbgems/mruby-io/test/mruby_io_test.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index e023b1904..7165d09cc 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -73,7 +73,7 @@ int socket_available_p; #if !defined(_WIN32) && !defined(_WIN64) static int mrb_io_socket_available() { - int fd, retval = 1; + int fd, retval = 0; struct sockaddr_un sun0; char socketname[] = "tmp.mruby-io-socket-ok.XXXXXXXX"; if (!(fd = mkstemp(socketname))) { @@ -87,11 +87,10 @@ static int mrb_io_socket_available() } sun0.sun_family = AF_UNIX; strncpy(sun0.sun_path, socketname, sizeof(sun0.sun_path)); - if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == -1) { - retval = 0; + if (bind(fd, (struct sockaddr *)&sun0, sizeof(sun0)) == 0) { + retval = 1; } sock_test_out: - retval = 0; unlink(socketname); close(fd); return retval; -- cgit v1.2.3 From 5e01674b72cf8205a94e157af893dcd34e27a306 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 28 Apr 2020 22:36:32 +0900 Subject: Should not use `assert` with expressions with side-effect; ref #4981 `assert()` can be completely removed when `NDEBUG` is set. --- mrbgems/mruby-io/test/mruby_io_test.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'mrbgems/mruby-io/test/mruby_io_test.c') diff --git a/mrbgems/mruby-io/test/mruby_io_test.c b/mrbgems/mruby-io/test/mruby_io_test.c index 7165d09cc..4dce48c26 100644 --- a/mrbgems/mruby-io/test/mruby_io_test.c +++ b/mrbgems/mruby-io/test/mruby_io_test.c @@ -53,7 +53,6 @@ mkdtemp(char *temp) #include #include #include - #include #include #endif @@ -117,10 +116,8 @@ mrb_io_test_io_setup(mrb_state *mrb, mrb_value self) char *tmpdir; wd_save = open(".", O_DIRECTORY); tmpdir = getenv("TMPDIR"); - if (tmpdir) - assert(!chdir(tmpdir)); - else - assert(!chdir("/tmp")); + if (tmpdir) chdir(tmpdir); + else chdir("/tmp"); } #endif @@ -220,7 +217,7 @@ mrb_io_test_io_cleanup(mrb_state *mrb, mrb_value self) #if !defined(_WIN32) && !defined(_WIN64) if(!socket_available_p) { - assert(!fchdir(wd_save)); + fchdir(wd_save); close(wd_save); } #endif -- cgit v1.2.3