diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/buf_size_test.c | 69 | ||||
| -rw-r--r-- | src/core/sock_test.c | 86 | ||||
| -rw-r--r-- | src/core/socket.c | 3 |
3 files changed, 30 insertions, 128 deletions
diff --git a/src/core/buf_size_test.c b/src/core/buf_size_test.c index 78678d66..b33a713b 100644 --- a/src/core/buf_size_test.c +++ b/src/core/buf_size_test.c @@ -1,5 +1,5 @@ // -// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a @@ -19,7 +19,6 @@ test_buffer_options(void) { nng_socket s1; int val; - size_t sz; char *opt; char *cases[] = { @@ -33,87 +32,21 @@ test_buffer_options(void) NUTS_CASE(opt); - // Can't receive a size into zero bytes. - sz = 0; - NUTS_FAIL(nng_socket_get(s1, opt, &val, &sz), NNG_EINVAL); - // Can set a valid size NUTS_PASS(nng_socket_set_int(s1, opt, 1234)); NUTS_PASS(nng_socket_get_int(s1, opt, &val)); NUTS_TRUE(val == 1234); - val = 0; - sz = sizeof(val); - NUTS_PASS(nng_socket_get(s1, opt, &val, &sz)); - NUTS_TRUE(val == 1234); - NUTS_TRUE(sz == sizeof(val)); - // Can't set a negative size NUTS_FAIL(nng_socket_set_int(s1, opt, -5), NNG_EINVAL); - // Can't pass a buf too small for size - sz = sizeof(val) - 1; - val = 1; - NUTS_FAIL(nng_socket_set(s1, opt, &val, sz), NNG_EINVAL); // Buffer sizes are limited to sane levels NUTS_FAIL(nng_socket_set_int(s1, opt, 0x100000), NNG_EINVAL); } NUTS_PASS(nng_close(s1)); } -void -test_buffer_legacy(void) -{ -#if NNG_ENABLE_COMPAT - nng_socket s1; - char *opt; - - char *cases[] = { - NNG_OPT_RECVBUF, - NNG_OPT_SENDBUF, - NULL, - }; - int legacy[] = { - NN_RCVBUF, - NN_SNDBUF, - }; - - NUTS_PASS(nng_pair1_open(&s1)); - for (int i = 0; (opt = cases[i]) != NULL; i++) { - int cnt; - int os = (int) s1.id; - size_t sz; - int nno = legacy[i]; - - NUTS_CASE(opt); - - sz = sizeof(cnt); - NUTS_PASS(nng_socket_set_int(s1, opt, 10)); - NUTS_TRUE( - nn_getsockopt(os, NN_SOL_SOCKET, nno, &cnt, &sz) == 0); - NUTS_TRUE(cnt == 10240); // 1k multiple - - cnt = 1; - NUTS_TRUE( - nn_setsockopt(os, NN_SOL_SOCKET, nno, &cnt, sz) == 0); - NUTS_TRUE( - nn_getsockopt(os, NN_SOL_SOCKET, nno, &cnt, &sz) == 0); - NUTS_TRUE(cnt == 1024); // round up! - NUTS_PASS(nng_socket_get_int(s1, opt, &cnt)); - NUTS_TRUE(cnt == 1); - - NUTS_TRUE( - nn_setsockopt(os, NN_SOL_SOCKET, nno, &cnt, 100) == -1); - NUTS_TRUE(nn_errno() == EINVAL); - } - NUTS_PASS(nng_close(s1)); -#endif -} - NUTS_TESTS = { { "buffer options", test_buffer_options }, -#if NNG_ENABLE_COMPAT - { "buffer legacy", test_buffer_legacy }, -#endif { NULL, NULL }, }; diff --git a/src/core/sock_test.c b/src/core/sock_test.c index 08ca8233..28a1201a 100644 --- a/src/core/sock_test.c +++ b/src/core/sock_test.c @@ -97,32 +97,32 @@ void test_socket_name(void) { nng_socket s1; - char name[128]; // 64 is max char *str; long id; char *end; - size_t sz; + char *name; - sz = sizeof(name); NUTS_OPEN(s1); - NUTS_PASS(nng_socket_get(s1, NNG_OPT_SOCKNAME, name, &sz)); - NUTS_TRUE(sz > 0 && sz < 64); - NUTS_TRUE(sz == strlen(name) + 1); + NUTS_PASS(nng_socket_get_string(s1, NNG_OPT_SOCKNAME, &name)); + NUTS_TRUE(strlen(name) > 0); + NUTS_TRUE(strlen(name) < 64); id = strtol(name, &end, 10); NUTS_TRUE(id == (long) s1.id); NUTS_TRUE(end != NULL && *end == '\0'); + nng_strfree(name); - NUTS_PASS(nng_socket_set(s1, NNG_OPT_SOCKNAME, "hello", 6)); - sz = sizeof(name); - NUTS_PASS(nng_socket_get(s1, NNG_OPT_SOCKNAME, name, &sz)); - NUTS_TRUE(sz == 6); + NUTS_PASS(nng_socket_set_string(s1, NNG_OPT_SOCKNAME, "hello")); + NUTS_PASS(nng_socket_get_string(s1, NNG_OPT_SOCKNAME, &name)); NUTS_MATCH(name, "hello"); + nng_strfree(name); - memset(name, 'A', 64); - name[64] = '\0'; + char buf[128]; + memset(buf, 'A', 128); + buf[127] = 0; - // strings must be NULL terminated - NUTS_FAIL(nng_socket_set(s1, NNG_OPT_SOCKNAME, name, 5), NNG_EINVAL); + // strings must not be too long + NUTS_FAIL( + nng_socket_set_string(s1, NNG_OPT_SOCKNAME, buf), NNG_EINVAL); NUTS_PASS(nng_socket_get_string(s1, NNG_OPT_SOCKNAME, &str)); NUTS_ASSERT(str != NULL); @@ -137,23 +137,22 @@ void test_socket_name_oversize(void) { nng_socket s1; - char name[256]; // 64 is max - size_t sz = sizeof(name); + char buf[256]; // 64 is max + size_t sz = sizeof(buf); + char *name; - memset(name, 'A', sz); + memset(buf, 'A', sz); NUTS_OPEN(s1); - NUTS_FAIL(nng_socket_set(s1, NNG_OPT_SOCKNAME, name, sz), NNG_EINVAL); - name[sz - 1] = '\0'; - NUTS_FAIL(nng_socket_set(s1, NNG_OPT_SOCKNAME, name, sz), NNG_EINVAL); + buf[sz - 1] = '\0'; + NUTS_FAIL( + nng_socket_set_string(s1, NNG_OPT_SOCKNAME, buf), NNG_EINVAL); - strcpy(name, "hello"); - NUTS_PASS(nng_socket_set(s1, NNG_OPT_SOCKNAME, name, sz)); - sz = sizeof(name); - memset(name, 'B', sz); - NUTS_PASS(nng_socket_get(s1, NNG_OPT_SOCKNAME, name, &sz)); - NUTS_TRUE(sz == 6); + strcpy(buf, "hello"); + NUTS_PASS(nng_socket_set_string(s1, NNG_OPT_SOCKNAME, buf)); + NUTS_PASS(nng_socket_get_string(s1, NNG_OPT_SOCKNAME, &name)); NUTS_MATCH(name, "hello"); + nng_strfree(name); NUTS_CLOSE(s1); } @@ -371,6 +370,7 @@ test_url_option(void) NUTS_PASS(nng_dialer_get_string(d, NNG_OPT_URL, &url)); NUTS_MATCH(url, "inproc://url2"); NUTS_FAIL(nng_dialer_set_string(d, NNG_OPT_URL, url), NNG_EREADONLY); + nng_strfree(url); NUTS_CLOSE(s1); } @@ -467,7 +467,6 @@ test_timeout_options(void) { nng_socket s1; nng_duration to; - size_t sz; char *cases[] = { NNG_OPT_RECVTIMEO, @@ -482,33 +481,16 @@ test_timeout_options(void) bool b; TEST_CASE(cases[i]); - // Can't receive a duration into zero bytes. - sz = 0; - NUTS_FAIL(nng_socket_get(s1, cases[i], &to, &sz), NNG_EINVAL); - // Type mismatches NUTS_FAIL(nng_socket_get_bool(s1, cases[i], &b), NNG_EBADTYPE); - sz = 1; - NUTS_FAIL(nng_socket_get(s1, cases[i], &b, &sz), NNG_EINVAL); // Can set a valid duration NUTS_PASS(nng_socket_set_ms(s1, cases[i], 1234)); NUTS_PASS(nng_socket_get_ms(s1, cases[i], &to)); NUTS_TRUE(to == 1234); - to = 0; - sz = sizeof(to); - NUTS_PASS(nng_socket_get(s1, cases[i], &to, &sz)); - NUTS_TRUE(to == 1234); - NUTS_TRUE(sz == sizeof(to)); - // Can't set a negative duration NUTS_FAIL(nng_socket_set_ms(s1, cases[i], -5), NNG_EINVAL); - - // Can't pass a buf too small for duration - sz = sizeof(to) - 1; - to = 1; - NUTS_FAIL(nng_socket_set(s1, cases[i], &to, sz), NNG_EINVAL); } NUTS_CLOSE(s1); } @@ -518,7 +500,6 @@ test_size_options(void) { nng_socket s1; size_t val; - size_t sz; char *opt; char *cases[] = { @@ -530,26 +511,11 @@ test_size_options(void) for (int i = 0; (opt = cases[i]) != NULL; i++) { TEST_CASE(opt); - // Can't receive a size into zero bytes. - sz = 0; - NUTS_FAIL(nng_socket_get(s1, opt, &val, &sz), NNG_EINVAL); - // Can set a valid duration NUTS_PASS(nng_socket_set_size(s1, opt, 1234)); NUTS_PASS(nng_socket_get_size(s1, opt, &val)); NUTS_TRUE(val == 1234); - val = 0; - sz = sizeof(val); - NUTS_PASS(nng_socket_get(s1, opt, &val, &sz)); - NUTS_TRUE(val == 1234); - NUTS_TRUE(sz == sizeof(val)); - - // Can't pass a buf too small for size - sz = sizeof(val) - 1; - val = 1; - NUTS_FAIL(nng_socket_set(s1, opt, &val, sz), NNG_EINVAL); - // We limit the limit to 4GB. Clear it if you want to // ship more than 4GB at a time. #if defined(_WIN64) || defined(_LP64) diff --git a/src/core/socket.c b/src/core/socket.c index 1e0b0404..b3fb96b2 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -210,6 +210,9 @@ static int sock_set_sockname(void *s, const void *buf, size_t sz, nni_type t) { int rv; + if (sz >= 64) { + return (NNG_EINVAL); + } rv = (nni_copyin_str( SOCK(s)->s_name, buf, sizeof(SOCK(s)->s_name), sz, t)); #ifdef NNG_ENABLE_STATS |
