From bf83cb28cd118a8d7ef1afe9cae87344dc853ec2 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Thu, 6 Oct 2016 10:53:48 -0500 Subject: [PATCH 1/3] nsapi - Fixed leftover bytes from suffix during ipv6 parsing Thanks to @EduardPon for hunting this down --- features/netsocket/SocketAddress.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/netsocket/SocketAddress.cpp b/features/netsocket/SocketAddress.cpp index 42e2b5416a..62165423fc 100644 --- a/features/netsocket/SocketAddress.cpp +++ b/features/netsocket/SocketAddress.cpp @@ -107,8 +107,6 @@ static void ipv6_from_address(uint8_t *bytes, const char *addr) { // Start with zeroed address uint16_t shorts[NSAPI_IPv6_BYTES/2]; - memset(shorts, 0, sizeof shorts); - int suffix = 0; // Find double colons and scan suffix @@ -122,6 +120,8 @@ static void ipv6_from_address(uint8_t *bytes, const char *addr) // Move suffix to end memmove(&shorts[NSAPI_IPv6_BYTES/2-suffix], &shorts[0], suffix*sizeof(uint16_t)); + memset(&shorts[0], 0, + (NSAPI_IPv6_BYTES/2-suffix)*sizeof(uint16_t)); // Scan prefix ipv6_scan_chunk(shorts, &addr[0]); From 281a0e2fe1c26f435d6284e69efb6ce14c5c1772 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Thu, 6 Oct 2016 13:21:32 -0500 Subject: [PATCH 2/3] nsapi - Added rudimentary ip parsing tests --- TESTS/netsocket/ip_parsing/main.cpp | 94 +++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 TESTS/netsocket/ip_parsing/main.cpp diff --git a/TESTS/netsocket/ip_parsing/main.cpp b/TESTS/netsocket/ip_parsing/main.cpp new file mode 100644 index 0000000000..54702f1d1b --- /dev/null +++ b/TESTS/netsocket/ip_parsing/main.cpp @@ -0,0 +1,94 @@ +#include "mbed.h" +#include "greentea-client/test_env.h" +#include "unity.h" +#include "utest.h" + +using namespace utest::v1; + + +// IP parsing verification +void test_ip_accept(const char *string, nsapi_addr_t addr) { + SocketAddress address; + TEST_ASSERT(address.set_ip_address(string)); + TEST_ASSERT(address == SocketAddress(addr)); +} + +template +void test_ip_reject() { + SocketAddress address; + TEST_ASSERT(!address.set_ip_address(string)); + TEST_ASSERT(!address); +} + +#define TEST_IP_ACCEPT(name, string, ...) \ +void name() { \ + nsapi_addr_t addr = __VA_ARGS__; \ + test_ip_accept(string, addr); \ +} + +#define TEST_IP_REJECT(name, string) \ +void name() { \ + test_ip_reject(string); \ +} + + +// Test cases +TEST_IP_ACCEPT(test_simple_ipv4_address, + "12.34.56.78", + {NSAPI_IPv4,{12,34,56,78}}) +TEST_IP_ACCEPT(test_left_weighted_ipv4_address, + "255.0.0.0", + {NSAPI_IPv4,{255,0,0,0}}) +TEST_IP_ACCEPT(test_right_weighted_ipv4_address, + "0.0.0.255", + {NSAPI_IPv4,{0,0,0,255}}) +TEST_IP_ACCEPT(test_null_ipv4_address, + "0.0.0.0", + {NSAPI_IPv4,{0,0,0,0}}) + +TEST_IP_ACCEPT(test_simple_ipv6_address, + "1234:5678:9abc:def0:1234:5678:9abc:def0", + {NSAPI_IPv6,{0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, + 0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0}}) +TEST_IP_ACCEPT(test_left_weighted_ipv6_address, + "1234:5678::", + {NSAPI_IPv6,{0x12,0x34,0x56,0x78,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}) +TEST_IP_ACCEPT(test_right_weighted_ipv6_address, + "::1234:5678", + {NSAPI_IPv6,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x12,0x34,0x56,0x78}}) +TEST_IP_ACCEPT(test_hollowed_ipv6_address, + "1234:5678::9abc:def8", + {NSAPI_IPv6,{0x12,0x34,0x56,0x78,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9a,0xbc,0xde,0xf8}}) +TEST_IP_ACCEPT(test_null_ipv6_address, + "::", + {NSAPI_IPv6,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}) + + +// Test setup +utest::v1::status_t test_setup(const size_t number_of_cases) { + GREENTEA_SETUP(10, "default_auto"); + return verbose_test_setup_handler(number_of_cases); +} + +Case cases[] = { + Case("Simple IPv4 address", test_simple_ipv4_address), + Case("Left-weighted IPv4 address", test_left_weighted_ipv4_address), + Case("Right-weighted IPv4 address", test_right_weighted_ipv4_address), + Case("Null IPv4 address", test_null_ipv4_address), + + Case("Simple IPv6 address", test_simple_ipv6_address), + Case("Left-weighted IPv6 address", test_left_weighted_ipv6_address), + Case("Right-weighted IPv6 address", test_right_weighted_ipv6_address), + Case("Hollowed IPv6 address", test_hollowed_ipv6_address), + Case("Null IPv6 address", test_null_ipv6_address), +}; + +Specification specification(test_setup, cases); + +int main() { + return !Harness::run(specification); +} From cce82b13ac28d12cebfd18816b18c6ebc3d43563 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Wed, 19 Oct 2016 16:49:35 -0500 Subject: [PATCH 3/3] nsapi - Fixed unaligned writes from