mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 16:43:05 -05:00
Measured from a payload process on a PS5 (firmware 12.70), where __inet_ntop/__inet_pton and the plain inet_ntop/inet_pton exports resolve to the same functions: - inet_ntop follows an AF_INET6 result with zero bytes up to size (sizes 4 to 65536 sampled) and never writes past size; AF_INET writes only the text and its NUL. - An unsupported family returns EAFNOSUPPORT first, even with null pointers. - A null source or text raises SIGSEGV during the call, before the size is checked; here it throws instead of returning EFAULT. - A null destination is reached only after the size check and the text parse: ENOSPC for a size that is too small, 0 for text that does not parse, and SIGSEGV (a throw here) otherwise. The test pins the measured inet_pton and inet_ntop rows, including all inputs the existing assertions use. The text-form debt entry is replaced by one that records what a payload process measured (the text forms, the order of the checks and the padding) and what is still assumed: the sizes that were not sampled, sizes above 65536, and a title process. inet_ntoa_r calls __inet_ntop, so a null inet_ntoa_r buffer with room for the text now throws, and a null buffer that is too small sets ENOSPC instead of EFAULT; the libSceLibcInternal debt entry says so. AI-assisted: yes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
645 lines
49 KiB
C++
645 lines
49 KiB
C++
#include "prx/libc/include/general/VabiMacros.hpp"
|
|
#include <array>
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
#include <stdexcept>
|
|
|
|
extern "C" {
|
|
int APS5_VABI __inet_pton_nid_postfix(int, const char*, void*);
|
|
const char* APS5_VABI __inet_ntop_nid_postfix(int, const void*, char*, std::uint32_t);
|
|
int APS5_VABI inet_pton_nid_postfix(int, const char*, void*);
|
|
const char* APS5_VABI inet_ntop_nid_postfix(int, const void*, char*, std::uint32_t);
|
|
int* APS5_VABI __error_nid_postfix();
|
|
}
|
|
static void Require(bool value) { if (!value) std::abort(); }
|
|
|
|
using Ntop = const char* (APS5_VABI *)(int, const void*, char*, std::uint32_t);
|
|
|
|
struct PtonCase { bool plain; int family; const char* text; int result; int error; const char* bytes; };
|
|
struct NtopCase { bool plain; int family; const char* source; std::uint32_t size; bool succeeds; int error; const char* bytes; std::size_t lastTouched; };
|
|
struct PadCase { int family; const char* source; std::uint32_t size; std::size_t lastTouched; };
|
|
|
|
static const PtonCase ConsolePton[] = {
|
|
{false, 2, "1.2.3.4", 1, 0, "01020304aaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "0.0.0.0", 1, 0, "00000000aaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "255.255.255.255", 1, 0, "ffffffffaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "256.1.1.1", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "01.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3.04", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "001.002.003.004", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3.0", 1, 0, "01020300aaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "127.1", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3.4.5", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1..2.3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, " 1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3.4 ", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "0x1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3.-1", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3.4/24", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "::1", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "::", 1, 0, "00000000000000000000000000000000"},
|
|
{false, 28, "::1", 1, 0, "00000000000000000000000000000001"},
|
|
{false, 28, "1::", 1, 0, "00010000000000000000000000000000"},
|
|
{false, 28, "1:2:3:4:5:6:7:8", 1, 0, "00010002000300040005000600070008"},
|
|
{false, 28, "1:2:3:4:5:6:7::", 1, 0, "00010002000300040005000600070000"},
|
|
{false, 28, "::2:3:4:5:6:7:8", 1, 0, "00000002000300040005000600070008"},
|
|
{false, 28, "1::2:3:4:5:6:7", 1, 0, "00010000000200030004000500060007"},
|
|
{false, 28, "1:2:3:4:5:6:7:8:9", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1::2::3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "::ffff:1.2.3.4", 1, 0, "00000000000000000000ffff01020304"},
|
|
{false, 28, "::1.2.3.4", 1, 0, "00000000000000000000000001020304"},
|
|
{false, 28, "1:2:3:4:5:6:1.2.3.4", 1, 0, "00010002000300040005000601020304"},
|
|
{false, 28, "1:2:3:4:5:6:7:1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "::1.2.3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "::01.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "fe80::1%eth0", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "FE80::ABCD", 1, 0, "fe80000000000000000000000000abcd"},
|
|
{false, 28, "12345::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "00001::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1:2:3:4:5:6:7:8:", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, ":1:2:3:4:5:6:7", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "0:0:0:0:0:0:0:0", 1, 0, "00000000000000000000000000000000"},
|
|
{false, 28, "1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, ":", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, ":::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 9999, "1.2.3.4", -1, 47, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 0, "1.2.3.4", -1, 47, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "192.0.2.17", 1, 0, "c0000211aaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "not-an-address", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "256.1.2.3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "01.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3.4.5", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3.4.", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, " 1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "0x1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1..3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "1.2.3.-4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 2, "255.0.7.100", 1, 0, "ff000764aaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "2001:db8::17", 1, 0, "20010db8000000000000000000000017"},
|
|
{false, 28, "not-an-address", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "::ffff:192.0.2.17", 1, 0, "00000000000000000000ffffc0000211"},
|
|
{false, 28, "::ffff:01.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "::ffff:1.2.3.04", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1:2:3:4:5:6:7:8::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "::1:2:3:4:5:6:7:8", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1::2::3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, ":::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, ":1::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1::2:", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, ":1:2:3:4:5:6:7", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1:2:3:4:5:6:7", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1:2:3:4:5:6:7:8:9", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "12345::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "fe80::1%eth0", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1.2.3.4::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "::1.2.3.4:1", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "::g", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1:2:3:4:5:6:1.2.3.4:7", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1:2:3:4:5:6:7:1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 28, "1:2:3:4:5:6:7::", 1, 0, "00010002000300040005000600070000"},
|
|
{false, 28, "ABCD:ef01::1", 1, 0, "abcdef01000000000000000000000001"},
|
|
{false, 28, "::ffff:0.0.0.1", 1, 0, "00000000000000000000ffff00000001"},
|
|
{false, 28, "::ffff:0:1:0", 1, 0, "0000000000000000ffff000000010000"},
|
|
{false, 28, "::1", 1, 0, "00000000000000000000000000000001"},
|
|
{false, 28, "::", 1, 0, "00000000000000000000000000000000"},
|
|
{false, 28, "1::", 1, 0, "00010000000000000000000000000000"},
|
|
{false, 28, "::2", 1, 0, "00000000000000000000000000000002"},
|
|
{false, 28, "::1.2.3.4", 1, 0, "00000000000000000000000001020304"},
|
|
{false, 28, "1:0:0:2:0:0:0:3", 1, 0, "00010000000000020000000000000003"},
|
|
{false, 28, "1:0:2:0:3:0:4:0", 1, 0, "00010000000200000003000000040000"},
|
|
{false, 28, "0:0:1:0:0:2:0:0", 1, 0, "00000000000100000000000200000000"},
|
|
{false, 28, "::ffff:1.2.3.4", 1, 0, "00000000000000000000ffff01020304"},
|
|
{false, 28, "2001:DB8::17", 1, 0, "20010db8000000000000000000000017"},
|
|
{false, 28, "0:0:0:0:0:0:1:0", 1, 0, "00000000000000000000000000010000"},
|
|
{false, 28, "::1:0", 1, 0, "00000000000000000000000000010000"},
|
|
{false, 28, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 1, 0, "ffffffffffffffffffffffffffffffff"},
|
|
{false, 10, "::1", -1, 47, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{false, 9999, "1.2.3.4", -1, 47, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "192.0.2.17", 1, 0, "c0000211aaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "not-an-address", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "256.1.2.3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "01.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "1.2.3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "1.2.3.4.5", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "1.2.3.4.", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, " 1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "0x1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "1..3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "1.2.3.-4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 2, "255.0.7.100", 1, 0, "ff000764aaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "2001:db8::17", 1, 0, "20010db8000000000000000000000017"},
|
|
{true, 28, "not-an-address", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "::ffff:192.0.2.17", 1, 0, "00000000000000000000ffffc0000211"},
|
|
{true, 28, "::ffff:01.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "::ffff:1.2.3.04", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "1:2:3:4:5:6:7:8::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "::1:2:3:4:5:6:7:8", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "1::2::3", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, ":::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, ":1::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "1::2:", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, ":1:2:3:4:5:6:7", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "1:2:3:4:5:6:7", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "1:2:3:4:5:6:7:8:9", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "12345::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "fe80::1%eth0", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "1.2.3.4::", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "::1.2.3.4:1", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "::g", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "1:2:3:4:5:6:1.2.3.4:7", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "1:2:3:4:5:6:7:1.2.3.4", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "", 0, 0, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 28, "1:2:3:4:5:6:7::", 1, 0, "00010002000300040005000600070000"},
|
|
{true, 28, "ABCD:ef01::1", 1, 0, "abcdef01000000000000000000000001"},
|
|
{true, 28, "::ffff:0.0.0.1", 1, 0, "00000000000000000000ffff00000001"},
|
|
{true, 28, "::ffff:0:1:0", 1, 0, "0000000000000000ffff000000010000"},
|
|
{true, 28, "::1", 1, 0, "00000000000000000000000000000001"},
|
|
{true, 28, "::", 1, 0, "00000000000000000000000000000000"},
|
|
{true, 28, "1::", 1, 0, "00010000000000000000000000000000"},
|
|
{true, 28, "::2", 1, 0, "00000000000000000000000000000002"},
|
|
{true, 28, "::1.2.3.4", 1, 0, "00000000000000000000000001020304"},
|
|
{true, 28, "1:0:0:2:0:0:0:3", 1, 0, "00010000000000020000000000000003"},
|
|
{true, 28, "1:0:2:0:3:0:4:0", 1, 0, "00010000000200000003000000040000"},
|
|
{true, 28, "0:0:1:0:0:2:0:0", 1, 0, "00000000000100000000000200000000"},
|
|
{true, 28, "::ffff:1.2.3.4", 1, 0, "00000000000000000000ffff01020304"},
|
|
{true, 28, "2001:DB8::17", 1, 0, "20010db8000000000000000000000017"},
|
|
{true, 28, "0:0:0:0:0:0:1:0", 1, 0, "00000000000000000000000000010000"},
|
|
{true, 28, "::1:0", 1, 0, "00000000000000000000000000010000"},
|
|
{true, 28, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 1, 0, "ffffffffffffffffffffffffffffffff"},
|
|
{true, 10, "::1", -1, 47, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
{true, 9999, "1.2.3.4", -1, 47, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
|
|
};
|
|
static const NtopCase ConsoleNtop[] = {
|
|
{false, 2, "01020304", 16, true, 0, "312e322e332e34005a5a5a5a5a5a5a5a", 0},
|
|
{false, 2, "00000000", 16, true, 0, "302e302e302e30005a5a5a5a5a5a5a5a", 0},
|
|
{false, 2, "ffffffff", 16, true, 0, "3235352e3235352e3235352e32353500", 0},
|
|
{false, 2, "01020304", 8, true, 0, "312e322e332e3400", 0},
|
|
{false, 2, "01020304", 7, false, 28, "5a5a5a5a5a5a5a", 0},
|
|
{false, 2, "01020304", 0, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000000000", 46, true, 0, "3a3a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00000000000000000000000000000001", 46, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00010000000000000000000000000000", 46, true, 0, "313a3a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00010000000000020000000000000003", 46, true, 0, "313a303a303a323a3a33000000000000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00010000000000020000000000030004", 46, true, 0, "313a3a323a303a303a333a3400000000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00010000000200030004000500060007", 46, true, 0, "313a303a323a333a343a353a363a3700000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00000000000000000000ffff01020304", 46, true, 0, "3a3a666666663a312e322e332e340000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00000000000000000000000001020304", 46, true, 0, "3a3a312e322e332e3400000000000000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00000000000000000000000000000002", 46, true, 0, "3a3a3200000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00000000000000000000ffff00000000", 46, true, 0, "3a3a666666663a302e302e302e300000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "0000000000000000ffff000001020304", 46, true, 0, "3a3a666666663a303a3130323a333034000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "abcd0000000000000000000000000000", 46, true, 0, "616263643a3a00000000000000000000000000000000000000000000000000000000000000000000000000000000", 0},
|
|
{false, 28, "00000000000000000000000000000001", 4, true, 0, "3a3a3100", 0},
|
|
{false, 28, "00000000000000000000000000000001", 3, false, 28, "5a5a5a", 0},
|
|
{false, 28, "ffffffffffffffffffffffffffffffff", 46, true, 0, "666666663a666666663a666666663a666666663a666666663a666666663a666666663a6666666600000000000000", 0},
|
|
{false, 28, "ffffffffffffffffffffffffffffffff", 40, true, 0, "666666663a666666663a666666663a666666663a666666663a666666663a666666663a6666666600", 0},
|
|
{false, 28, "ffffffffffffffffffffffffffffffff", 39, false, 28, "5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a", 0},
|
|
{false, 28, "00000000000000000000ffffffffffff", 46, true, 0, "3a3a666666663a3235352e3235352e3235352e323535000000000000000000000000000000000000000000000000", 0},
|
|
{false, 9999, "01020304000000000000000000000000", 16, false, 47, "5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a", 0},
|
|
{false, 2, "c0000211", 64, true, 0, "3139322e302e322e313700", 11},
|
|
{false, 2, "c0000211", 11, true, 0, "3139322e302e322e313700", 11},
|
|
{false, 2, "c0000211", 10, false, 28, "", 0},
|
|
{false, 2, "c0000211", 1, false, 28, "", 0},
|
|
{false, 2, "ff000764", 64, true, 0, "3235352e302e372e31303000", 12},
|
|
{false, 2, "ff000764", 12, true, 0, "3235352e302e372e31303000", 12},
|
|
{false, 2, "ff000764", 11, false, 28, "", 0},
|
|
{false, 2, "ff000764", 1, false, 28, "", 0},
|
|
{false, 28, "20010db8000000000000000000000017", 64, true, 0, "323030313a6462383a3a313700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "20010db8000000000000000000000017", 13, true, 0, "323030313a6462383a3a313700", 13},
|
|
{false, 28, "20010db8000000000000000000000017", 12, false, 28, "", 0},
|
|
{false, 28, "20010db8000000000000000000000017", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000ffffc0000211", 64, true, 0, "3a3a666666663a3139322e302e322e31370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000000000000ffffc0000211", 18, true, 0, "3a3a666666663a3139322e302e322e313700", 18},
|
|
{false, 28, "00000000000000000000ffffc0000211", 17, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000ffffc0000211", 1, false, 28, "", 0},
|
|
{false, 28, "00010002000300040005000600070000", 64, true, 0, "313a323a333a343a353a363a373a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00010002000300040005000600070000", 16, true, 0, "313a323a333a343a353a363a373a3000", 16},
|
|
{false, 28, "00010002000300040005000600070000", 15, false, 28, "", 0},
|
|
{false, 28, "00010002000300040005000600070000", 1, false, 28, "", 0},
|
|
{false, 28, "abcdef01000000000000000000000001", 64, true, 0, "616263643a656630313a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "abcdef01000000000000000000000001", 13, true, 0, "616263643a656630313a3a3100", 13},
|
|
{false, 28, "abcdef01000000000000000000000001", 12, false, 28, "", 0},
|
|
{false, 28, "abcdef01000000000000000000000001", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000ffff00000001", 64, true, 0, "3a3a666666663a302e302e302e310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000000000000ffff00000001", 15, true, 0, "3a3a666666663a302e302e302e3100", 15},
|
|
{false, 28, "00000000000000000000ffff00000001", 14, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000ffff00000001", 1, false, 28, "", 0},
|
|
{false, 28, "0000000000000000ffff000000010000", 64, true, 0, "3a3a666666663a303a313a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "0000000000000000ffff000000010000", 13, true, 0, "3a3a666666663a303a313a3000", 13},
|
|
{false, 28, "0000000000000000ffff000000010000", 12, false, 28, "", 0},
|
|
{false, 28, "0000000000000000ffff000000010000", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000000001", 64, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000000000000000000000001", 4, true, 0, "3a3a3100", 4},
|
|
{false, 28, "00000000000000000000000000000001", 3, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000000001", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000000000", 64, true, 0, "3a3a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000000000000000000000000", 3, true, 0, "3a3a00", 3},
|
|
{false, 28, "00000000000000000000000000000000", 2, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000000000", 1, false, 28, "", 0},
|
|
{false, 28, "00010000000000000000000000000000", 64, true, 0, "313a3a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00010000000000000000000000000000", 4, true, 0, "313a3a00", 4},
|
|
{false, 28, "00010000000000000000000000000000", 3, false, 28, "", 0},
|
|
{false, 28, "00010000000000000000000000000000", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000000002", 64, true, 0, "3a3a3200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000000000000000000000002", 4, true, 0, "3a3a3200", 4},
|
|
{false, 28, "00000000000000000000000000000002", 3, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000000002", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000001020304", 64, true, 0, "3a3a312e322e332e3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000000000000000001020304", 10, true, 0, "3a3a312e322e332e3400", 10},
|
|
{false, 28, "00000000000000000000000001020304", 9, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000001020304", 1, false, 28, "", 0},
|
|
{false, 28, "00010000000000020000000000000003", 64, true, 0, "313a303a303a323a3a33000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00010000000000020000000000000003", 11, true, 0, "313a303a303a323a3a3300", 11},
|
|
{false, 28, "00010000000000020000000000000003", 10, false, 28, "", 0},
|
|
{false, 28, "00010000000000020000000000000003", 1, false, 28, "", 0},
|
|
{false, 28, "00010000000200000003000000040000", 64, true, 0, "313a303a323a303a333a303a343a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00010000000200000003000000040000", 16, true, 0, "313a303a323a303a333a303a343a3000", 16},
|
|
{false, 28, "00010000000200000003000000040000", 15, false, 28, "", 0},
|
|
{false, 28, "00010000000200000003000000040000", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000100000000000200000000", 64, true, 0, "3a3a313a303a303a323a303a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000100000000000200000000", 14, true, 0, "3a3a313a303a303a323a303a3000", 14},
|
|
{false, 28, "00000000000100000000000200000000", 13, false, 28, "", 0},
|
|
{false, 28, "00000000000100000000000200000000", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000ffff01020304", 64, true, 0, "3a3a666666663a312e322e332e340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000000000000ffff01020304", 15, true, 0, "3a3a666666663a312e322e332e3400", 15},
|
|
{false, 28, "00000000000000000000ffff01020304", 14, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000ffff01020304", 1, false, 28, "", 0},
|
|
{false, 28, "20010db8000000000000000000000017", 64, true, 0, "323030313a6462383a3a313700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "20010db8000000000000000000000017", 13, true, 0, "323030313a6462383a3a313700", 13},
|
|
{false, 28, "20010db8000000000000000000000017", 12, false, 28, "", 0},
|
|
{false, 28, "20010db8000000000000000000000017", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000010000", 64, true, 0, "3a3a302e312e302e3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000000000000000000010000", 10, true, 0, "3a3a302e312e302e3000", 10},
|
|
{false, 28, "00000000000000000000000000010000", 9, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000010000", 1, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000010000", 64, true, 0, "3a3a302e312e302e3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "00000000000000000000000000010000", 10, true, 0, "3a3a302e312e302e3000", 10},
|
|
{false, 28, "00000000000000000000000000010000", 9, false, 28, "", 0},
|
|
{false, 28, "00000000000000000000000000010000", 1, false, 28, "", 0},
|
|
{false, 28, "ffffffffffffffffffffffffffffffff", 64, true, 0, "666666663a666666663a666666663a666666663a666666663a666666663a666666663a6666666600000000000000000000000000000000000000000000000000", 64},
|
|
{false, 28, "ffffffffffffffffffffffffffffffff", 40, true, 0, "666666663a666666663a666666663a666666663a666666663a666666663a666666663a6666666600", 40},
|
|
{false, 28, "ffffffffffffffffffffffffffffffff", 39, false, 28, "", 0},
|
|
{false, 28, "ffffffffffffffffffffffffffffffff", 1, false, 28, "", 0},
|
|
{false, 10, "01020304", 64, false, 47, "", 0},
|
|
{false, 9999, "01020304", 64, false, 47, "", 0},
|
|
{true, 2, "c0000211", 64, true, 0, "3139322e302e322e313700", 11},
|
|
{true, 2, "c0000211", 11, true, 0, "3139322e302e322e313700", 11},
|
|
{true, 2, "c0000211", 10, false, 28, "", 0},
|
|
{true, 2, "c0000211", 1, false, 28, "", 0},
|
|
{true, 2, "ff000764", 64, true, 0, "3235352e302e372e31303000", 12},
|
|
{true, 2, "ff000764", 12, true, 0, "3235352e302e372e31303000", 12},
|
|
{true, 2, "ff000764", 11, false, 28, "", 0},
|
|
{true, 2, "ff000764", 1, false, 28, "", 0},
|
|
{true, 28, "20010db8000000000000000000000017", 64, true, 0, "323030313a6462383a3a313700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "20010db8000000000000000000000017", 13, true, 0, "323030313a6462383a3a313700", 13},
|
|
{true, 28, "20010db8000000000000000000000017", 12, false, 28, "", 0},
|
|
{true, 28, "20010db8000000000000000000000017", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000ffffc0000211", 64, true, 0, "3a3a666666663a3139322e302e322e31370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000000000000ffffc0000211", 18, true, 0, "3a3a666666663a3139322e302e322e313700", 18},
|
|
{true, 28, "00000000000000000000ffffc0000211", 17, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000ffffc0000211", 1, false, 28, "", 0},
|
|
{true, 28, "00010002000300040005000600070000", 64, true, 0, "313a323a333a343a353a363a373a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00010002000300040005000600070000", 16, true, 0, "313a323a333a343a353a363a373a3000", 16},
|
|
{true, 28, "00010002000300040005000600070000", 15, false, 28, "", 0},
|
|
{true, 28, "00010002000300040005000600070000", 1, false, 28, "", 0},
|
|
{true, 28, "abcdef01000000000000000000000001", 64, true, 0, "616263643a656630313a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "abcdef01000000000000000000000001", 13, true, 0, "616263643a656630313a3a3100", 13},
|
|
{true, 28, "abcdef01000000000000000000000001", 12, false, 28, "", 0},
|
|
{true, 28, "abcdef01000000000000000000000001", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000ffff00000001", 64, true, 0, "3a3a666666663a302e302e302e310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000000000000ffff00000001", 15, true, 0, "3a3a666666663a302e302e302e3100", 15},
|
|
{true, 28, "00000000000000000000ffff00000001", 14, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000ffff00000001", 1, false, 28, "", 0},
|
|
{true, 28, "0000000000000000ffff000000010000", 64, true, 0, "3a3a666666663a303a313a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "0000000000000000ffff000000010000", 13, true, 0, "3a3a666666663a303a313a3000", 13},
|
|
{true, 28, "0000000000000000ffff000000010000", 12, false, 28, "", 0},
|
|
{true, 28, "0000000000000000ffff000000010000", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000000001", 64, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000000000000000000000001", 4, true, 0, "3a3a3100", 4},
|
|
{true, 28, "00000000000000000000000000000001", 3, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000000001", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000000000", 64, true, 0, "3a3a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000000000000000000000000", 3, true, 0, "3a3a00", 3},
|
|
{true, 28, "00000000000000000000000000000000", 2, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000000000", 1, false, 28, "", 0},
|
|
{true, 28, "00010000000000000000000000000000", 64, true, 0, "313a3a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00010000000000000000000000000000", 4, true, 0, "313a3a00", 4},
|
|
{true, 28, "00010000000000000000000000000000", 3, false, 28, "", 0},
|
|
{true, 28, "00010000000000000000000000000000", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000000002", 64, true, 0, "3a3a3200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000000000000000000000002", 4, true, 0, "3a3a3200", 4},
|
|
{true, 28, "00000000000000000000000000000002", 3, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000000002", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000001020304", 64, true, 0, "3a3a312e322e332e3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000000000000000001020304", 10, true, 0, "3a3a312e322e332e3400", 10},
|
|
{true, 28, "00000000000000000000000001020304", 9, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000001020304", 1, false, 28, "", 0},
|
|
{true, 28, "00010000000000020000000000000003", 64, true, 0, "313a303a303a323a3a33000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00010000000000020000000000000003", 11, true, 0, "313a303a303a323a3a3300", 11},
|
|
{true, 28, "00010000000000020000000000000003", 10, false, 28, "", 0},
|
|
{true, 28, "00010000000000020000000000000003", 1, false, 28, "", 0},
|
|
{true, 28, "00010000000200000003000000040000", 64, true, 0, "313a303a323a303a333a303a343a3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00010000000200000003000000040000", 16, true, 0, "313a303a323a303a333a303a343a3000", 16},
|
|
{true, 28, "00010000000200000003000000040000", 15, false, 28, "", 0},
|
|
{true, 28, "00010000000200000003000000040000", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000100000000000200000000", 64, true, 0, "3a3a313a303a303a323a303a30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000100000000000200000000", 14, true, 0, "3a3a313a303a303a323a303a3000", 14},
|
|
{true, 28, "00000000000100000000000200000000", 13, false, 28, "", 0},
|
|
{true, 28, "00000000000100000000000200000000", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000ffff01020304", 64, true, 0, "3a3a666666663a312e322e332e340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000000000000ffff01020304", 15, true, 0, "3a3a666666663a312e322e332e3400", 15},
|
|
{true, 28, "00000000000000000000ffff01020304", 14, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000ffff01020304", 1, false, 28, "", 0},
|
|
{true, 28, "20010db8000000000000000000000017", 64, true, 0, "323030313a6462383a3a313700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "20010db8000000000000000000000017", 13, true, 0, "323030313a6462383a3a313700", 13},
|
|
{true, 28, "20010db8000000000000000000000017", 12, false, 28, "", 0},
|
|
{true, 28, "20010db8000000000000000000000017", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000010000", 64, true, 0, "3a3a302e312e302e3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000000000000000000010000", 10, true, 0, "3a3a302e312e302e3000", 10},
|
|
{true, 28, "00000000000000000000000000010000", 9, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000010000", 1, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000010000", 64, true, 0, "3a3a302e312e302e3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "00000000000000000000000000010000", 10, true, 0, "3a3a302e312e302e3000", 10},
|
|
{true, 28, "00000000000000000000000000010000", 9, false, 28, "", 0},
|
|
{true, 28, "00000000000000000000000000010000", 1, false, 28, "", 0},
|
|
{true, 28, "ffffffffffffffffffffffffffffffff", 64, true, 0, "666666663a666666663a666666663a666666663a666666663a666666663a666666663a6666666600000000000000000000000000000000000000000000000000", 64},
|
|
{true, 28, "ffffffffffffffffffffffffffffffff", 40, true, 0, "666666663a666666663a666666663a666666663a666666663a666666663a666666663a6666666600", 40},
|
|
{true, 28, "ffffffffffffffffffffffffffffffff", 39, false, 28, "", 0},
|
|
{true, 28, "ffffffffffffffffffffffffffffffff", 1, false, 28, "", 0},
|
|
{true, 10, "01020304", 64, false, 47, "", 0},
|
|
{true, 9999, "01020304", 64, false, 47, "", 0},
|
|
{false, 28, "00000000000000000000000000000001", 65, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 65},
|
|
{false, 2, "01020304", 65, true, 0, "312e322e332e3400", 8},
|
|
{false, 28, "00000000000000000000000000000001", 128, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 128},
|
|
{false, 2, "01020304", 128, true, 0, "312e322e332e3400", 8},
|
|
{false, 28, "00000000000000000000000000000001", 1024, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 1024},
|
|
{false, 2, "01020304", 1024, true, 0, "312e322e332e3400", 8},
|
|
{false, 28, "00000000000000000000000000000001", 4096, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 4096},
|
|
{false, 2, "01020304", 4096, true, 0, "312e322e332e3400", 8},
|
|
{false, 28, "00000000000000000000000000000001", 65536, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 65536},
|
|
{false, 2, "01020304", 65536, true, 0, "312e322e332e3400", 8},
|
|
{true, 28, "00000000000000000000000000000001", 65, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 65},
|
|
{true, 2, "01020304", 65, true, 0, "312e322e332e3400", 8},
|
|
{true, 28, "00000000000000000000000000000001", 128, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 128},
|
|
{true, 2, "01020304", 128, true, 0, "312e322e332e3400", 8},
|
|
{true, 28, "00000000000000000000000000000001", 1024, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 1024},
|
|
{true, 2, "01020304", 1024, true, 0, "312e322e332e3400", 8},
|
|
{true, 28, "00000000000000000000000000000001", 4096, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 4096},
|
|
{true, 2, "01020304", 4096, true, 0, "312e322e332e3400", 8},
|
|
{true, 28, "00000000000000000000000000000001", 65536, true, 0, "3a3a3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 65536},
|
|
{true, 2, "01020304", 65536, true, 0, "312e322e332e3400", 8},
|
|
};
|
|
static const PadCase ConsolePaddingBoth[] = {
|
|
{28, "00000000000000000000000000000001", 4, 4},
|
|
{28, "00000000000000000000000000000001", 5, 5},
|
|
{28, "00000000000000000000000000000001", 16, 16},
|
|
{28, "00000000000000000000000000000001", 45, 45},
|
|
{28, "00000000000000000000000000000001", 46, 46},
|
|
{28, "00000000000000000000000000000001", 47, 47},
|
|
{28, "00000000000000000000000000000001", 64, 64},
|
|
{28, "ffffffffffffffffffffffffffffffff", 64, 64},
|
|
{2, "01020304", 8, 8},
|
|
{2, "01020304", 16, 8},
|
|
{2, "01020304", 64, 8},
|
|
};
|
|
static const PadCase ConsolePaddingLarge[] = {
|
|
{28, "00000000000000000000000000000001", 65, 65},
|
|
{28, "00000000000000000000000000000001", 128, 128},
|
|
{28, "00000000000000000000000000000001", 1024, 1024},
|
|
{28, "00000000000000000000000000000001", 4096, 4096},
|
|
{28, "00000000000000000000000000000001", 65536, 65536},
|
|
{2, "01020304", 65, 8},
|
|
{2, "01020304", 128, 8},
|
|
{2, "01020304", 1024, 8},
|
|
{2, "01020304", 4096, 8},
|
|
{2, "01020304", 65536, 8},
|
|
};
|
|
static const PadCase ConsolePaddingUnderscored[] = {
|
|
{28, "00000000000000000000000000000001", 64, 64},
|
|
{28, "00000000000000000000000000000001", 65, 65},
|
|
{28, "00000000000000000000000000000001", 128, 128},
|
|
{28, "00000000000000000000000000000001", 256, 256},
|
|
{28, "00000000000000000000000000000001", 1024, 1024},
|
|
{2, "01020304", 64, 8},
|
|
{2, "01020304", 65, 8},
|
|
{2, "01020304", 128, 8},
|
|
{2, "01020304", 256, 8},
|
|
{2, "01020304", 1024, 8},
|
|
};
|
|
|
|
static unsigned HexValue(char digit) { return digit <= '9' ? static_cast<unsigned>(digit - '0') : static_cast<unsigned>(digit - 'a' + 10); }
|
|
|
|
static std::size_t FromHex(const char* hex, unsigned char* out) {
|
|
std::size_t index = 0;
|
|
for (; hex[2 * index]; ++index) out[index] = static_cast<unsigned char>(HexValue(hex[2 * index]) << 4 | HexValue(hex[2 * index + 1]));
|
|
return index;
|
|
}
|
|
|
|
static bool SameBytes(const void* data, const char* hex) {
|
|
const auto* bytes = static_cast<const unsigned char*>(data);
|
|
for (std::size_t index = 0; hex[2 * index]; ++index)
|
|
if (bytes[index] != (HexValue(hex[2 * index]) << 4 | HexValue(hex[2 * index + 1]))) return false;
|
|
return true;
|
|
}
|
|
|
|
template <typename TCall>
|
|
static bool Throws(TCall call) {
|
|
try {
|
|
call();
|
|
} catch (const std::runtime_error&) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
static char Wide[70000];
|
|
|
|
static void CheckConsolePton() {
|
|
for (const PtonCase& sample : ConsolePton) {
|
|
unsigned char destination[16];
|
|
std::memset(destination, 0xAA, sizeof(destination));
|
|
*__error_nid_postfix() = 0;
|
|
const int result = sample.plain ? inet_pton_nid_postfix(sample.family, sample.text, destination)
|
|
: __inet_pton_nid_postfix(sample.family, sample.text, destination);
|
|
Require(result == sample.result);
|
|
Require(*__error_nid_postfix() == sample.error);
|
|
Require(SameBytes(destination, sample.bytes));
|
|
}
|
|
}
|
|
|
|
static void CheckConsoleNtop() {
|
|
for (const NtopCase& sample : ConsoleNtop) {
|
|
unsigned char source[16]{};
|
|
FromHex(sample.source, source);
|
|
std::memset(Wide, 'Z', sizeof(Wide));
|
|
*__error_nid_postfix() = 0;
|
|
const char* result = sample.plain ? inet_ntop_nid_postfix(sample.family, source, Wide, sample.size)
|
|
: __inet_ntop_nid_postfix(sample.family, source, Wide, sample.size);
|
|
Require(result == (sample.succeeds ? Wide : nullptr));
|
|
Require(*__error_nid_postfix() == sample.error);
|
|
Require(SameBytes(Wide, sample.bytes));
|
|
if (!sample.lastTouched && sample.succeeds) continue;
|
|
const std::size_t shown = std::strlen(sample.bytes) / 2;
|
|
for (std::size_t index = shown; index < sample.lastTouched; ++index) Require(Wide[index] != 'Z');
|
|
for (std::size_t index = sample.lastTouched; index < sizeof(Wide); ++index) Require(Wide[index] == 'Z');
|
|
}
|
|
}
|
|
|
|
static void CheckConsolePadding(const PadCase* samples, std::size_t count, Ntop ntop) {
|
|
for (std::size_t sample = 0; sample < count; ++sample) {
|
|
unsigned char source[16]{};
|
|
FromHex(samples[sample].source, source);
|
|
std::memset(Wide, 'Z', sizeof(Wide));
|
|
Require(ntop(samples[sample].family, source, Wide, samples[sample].size) == Wide);
|
|
for (std::size_t index = std::strlen(Wide); index < samples[sample].lastTouched; ++index) Require(Wide[index] == '\0');
|
|
for (std::size_t index = samples[sample].lastTouched; index < sizeof(Wide); ++index) Require(Wide[index] == 'Z');
|
|
}
|
|
}
|
|
|
|
static void CheckNullPointers() {
|
|
const unsigned char loopback[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
|
|
const unsigned char quad[16] = {1, 2, 3, 4};
|
|
unsigned char bytes[16]{};
|
|
char text[64];
|
|
Require(Throws([&] { __inet_ntop_nid_postfix(28, nullptr, text, sizeof(text)); }));
|
|
Require(Throws([&] { __inet_ntop_nid_postfix(2, nullptr, text, sizeof(text)); }));
|
|
Require(Throws([&] { __inet_ntop_nid_postfix(28, loopback, nullptr, 46); }));
|
|
Require(Throws([&] { __inet_ntop_nid_postfix(2, quad, nullptr, 16); }));
|
|
Require(Throws([&] { inet_ntop_nid_postfix(28, nullptr, text, sizeof(text)); }));
|
|
Require(Throws([&] { inet_ntop_nid_postfix(28, loopback, nullptr, 46); }));
|
|
Require(Throws([&] { __inet_ntop_nid_postfix(2, nullptr, text, 0); }));
|
|
Require(Throws([&] { __inet_ntop_nid_postfix(28, nullptr, text, 1); }));
|
|
Require(Throws([&] { inet_ntop_nid_postfix(2, nullptr, text, 0); }));
|
|
Require(Throws([&] { inet_ntop_nid_postfix(28, nullptr, text, 1); }));
|
|
for (Ntop ntop : {__inet_ntop_nid_postfix, inet_ntop_nid_postfix}) {
|
|
*__error_nid_postfix() = 0;
|
|
Require(ntop(28, loopback, nullptr, 3) == nullptr && *__error_nid_postfix() == 28);
|
|
*__error_nid_postfix() = 0;
|
|
Require(ntop(2, quad, nullptr, 7) == nullptr && *__error_nid_postfix() == 28);
|
|
*__error_nid_postfix() = 0;
|
|
Require(ntop(2, quad, nullptr, 0) == nullptr && *__error_nid_postfix() == 28);
|
|
}
|
|
Require(Throws([&] { __inet_pton_nid_postfix(2, nullptr, bytes); }));
|
|
Require(Throws([&] { __inet_pton_nid_postfix(28, nullptr, bytes); }));
|
|
Require(Throws([&] { __inet_pton_nid_postfix(2, "1.2.3.4", nullptr); }));
|
|
Require(Throws([&] { __inet_pton_nid_postfix(28, "::1", nullptr); }));
|
|
Require(Throws([&] { inet_pton_nid_postfix(2, nullptr, bytes); }));
|
|
Require(Throws([&] { inet_pton_nid_postfix(2, "1.2.3.4", nullptr); }));
|
|
*__error_nid_postfix() = 0;
|
|
Require(__inet_pton_nid_postfix(2, "1.2.3", nullptr) == 0 && *__error_nid_postfix() == 0);
|
|
Require(__inet_pton_nid_postfix(28, "zzz", nullptr) == 0 && *__error_nid_postfix() == 0);
|
|
Require(__inet_pton_nid_postfix(2, "", nullptr) == 0 && *__error_nid_postfix() == 0);
|
|
Require(inet_pton_nid_postfix(2, "1.2.3", nullptr) == 0 && *__error_nid_postfix() == 0);
|
|
Require(inet_pton_nid_postfix(28, "zzz", nullptr) == 0 && *__error_nid_postfix() == 0);
|
|
Require(inet_pton_nid_postfix(2, "", nullptr) == 0 && *__error_nid_postfix() == 0);
|
|
*__error_nid_postfix() = 0;
|
|
Require(__inet_ntop_nid_postfix(9999, nullptr, text, sizeof(text)) == nullptr && *__error_nid_postfix() == 47);
|
|
*__error_nid_postfix() = 0;
|
|
Require(__inet_ntop_nid_postfix(9999, bytes, nullptr, 46) == nullptr && *__error_nid_postfix() == 47);
|
|
*__error_nid_postfix() = 0;
|
|
Require(__inet_pton_nid_postfix(9999, nullptr, bytes) == -1 && *__error_nid_postfix() == 47);
|
|
*__error_nid_postfix() = 0;
|
|
Require(__inet_pton_nid_postfix(9999, "1.2.3.4", nullptr) == -1 && *__error_nid_postfix() == 47);
|
|
*__error_nid_postfix() = 0;
|
|
Require(inet_ntop_nid_postfix(9999, nullptr, text, sizeof(text)) == nullptr && *__error_nid_postfix() == 47);
|
|
*__error_nid_postfix() = 0;
|
|
Require(inet_ntop_nid_postfix(9999, quad, nullptr, 46) == nullptr && *__error_nid_postfix() == 47);
|
|
*__error_nid_postfix() = 0;
|
|
Require(inet_pton_nid_postfix(9999, nullptr, bytes) == -1 && *__error_nid_postfix() == 47);
|
|
*__error_nid_postfix() = 0;
|
|
Require(inet_pton_nid_postfix(9999, "1.2.3.4", nullptr) == -1 && *__error_nid_postfix() == 47);
|
|
}
|
|
|
|
static void CheckErrnoKept() {
|
|
unsigned char bytes[16]{};
|
|
char text[64];
|
|
*__error_nid_postfix() = 13;
|
|
Require(__inet_pton_nid_postfix(2, "1.2.3.4", bytes) == 1 && *__error_nid_postfix() == 13);
|
|
Require(__inet_pton_nid_postfix(2, "1.2.3", bytes) == 0 && *__error_nid_postfix() == 13);
|
|
Require(__inet_pton_nid_postfix(28, "::1", bytes) == 1 && *__error_nid_postfix() == 13);
|
|
Require(__inet_ntop_nid_postfix(2, bytes, text, sizeof(text)) == text && *__error_nid_postfix() == 13);
|
|
}
|
|
|
|
int main() {
|
|
for (int family : {2, 28}) {
|
|
const char* input = family == 2 ? "192.0.2.17" : "2001:db8::17";
|
|
std::array<unsigned char, 16> address{};
|
|
Require(__inet_pton_nid_postfix(family, input, address.data()) == 1);
|
|
char output[64]{};
|
|
Require(__inet_ntop_nid_postfix(family, address.data(), output, sizeof(output)) == output);
|
|
Require(std::strcmp(input, output) == 0);
|
|
output[0] = 'x';
|
|
Require(__inet_ntop_nid_postfix(family, address.data(), output, 1) == nullptr);
|
|
Require(*__error_nid_postfix() == 28 && output[0] == 'x');
|
|
const auto original = address;
|
|
Require(__inet_pton_nid_postfix(family, "not-an-address", address.data()) == 0);
|
|
Require(address == original);
|
|
}
|
|
std::array<unsigned char, 16> address{};
|
|
Require(__inet_pton_nid_postfix(10, "::1", address.data()) == -1);
|
|
Require(*__error_nid_postfix() == 47); // Linux AF_INET6 is not PS5 AF_INET6
|
|
Require(__inet_pton_nid_postfix(2, "256.1.2.3", address.data()) == 0);
|
|
Require(__inet_pton_nid_postfix(28, "::ffff:192.0.2.17", address.data()) == 1);
|
|
Require(address[10] == 255 && address[11] == 255 && address[12] == 192 && address[15] == 17);
|
|
|
|
for (const char* rejected : {"01.2.3.4", "1.2.3", "1.2.3.4.5", "1.2.3.4.", " 1.2.3.4", "0x1.2.3.4", "1..3.4", "1.2.3.-4"}) {
|
|
address.fill(0xA5);
|
|
Require(__inet_pton_nid_postfix(2, rejected, address.data()) == 0);
|
|
Require(address[0] == 0xA5);
|
|
}
|
|
for (const char* rejected : {"::ffff:01.2.3.4", "::ffff:1.2.3.04", "1:2:3:4:5:6:7:8::", "::1:2:3:4:5:6:7:8", "1::2::3", ":::", ":1::", "1::2:", ":1:2:3:4:5:6:7",
|
|
"1:2:3:4:5:6:7", "1:2:3:4:5:6:7:8:9", "12345::", "fe80::1%eth0", "1.2.3.4::", "::1.2.3.4:1", "::g", "1:2:3:4:5:6:1.2.3.4:7",
|
|
"1:2:3:4:5:6:7:1.2.3.4", ""}) {
|
|
address.fill(0xA5);
|
|
Require(__inet_pton_nid_postfix(28, rejected, address.data()) == 0);
|
|
Require(address[0] == 0xA5 && address[15] == 0xA5);
|
|
}
|
|
Require(__inet_pton_nid_postfix(28, "1:2:3:4:5:6:7::", address.data()) == 1);
|
|
Require(address[13] == 7 && address[14] == 0 && address[1] == 1);
|
|
Require(__inet_pton_nid_postfix(28, "ABCD:ef01::1", address.data()) == 1);
|
|
Require(address[0] == 0xAB && address[1] == 0xCD && address[2] == 0xEF && address[3] == 0x01 && address[15] == 1);
|
|
|
|
struct Text { const char* bytesAsText; const char* expected; };
|
|
const Text samples[] = {
|
|
{"::ffff:0.0.0.1", "::ffff:0.0.0.1"}, {"::ffff:0:1:0", "::ffff:0:1:0"}, {"::1", "::1"}, {"::", "::"}, {"1::", "1::"},
|
|
{"::2", "::2"}, {"::1.2.3.4", "::1.2.3.4"}, {"1:0:0:2:0:0:0:3", "1:0:0:2::3"}, {"1:0:2:0:3:0:4:0", "1:0:2:0:3:0:4:0"},
|
|
{"0:0:1:0:0:2:0:0", "::1:0:0:2:0:0"}, {"::ffff:1.2.3.4", "::ffff:1.2.3.4"}, {"2001:DB8::17", "2001:db8::17"}};
|
|
for (const Text& sample : samples) {
|
|
Require(__inet_pton_nid_postfix(28, sample.bytesAsText, address.data()) == 1);
|
|
char output[64]{};
|
|
Require(__inet_ntop_nid_postfix(28, address.data(), output, sizeof(output)) == output);
|
|
Require(std::strcmp(output, sample.expected) == 0);
|
|
const auto length = std::strlen(sample.expected);
|
|
std::memset(output, 'x', sizeof(output));
|
|
Require(__inet_ntop_nid_postfix(28, address.data(), output, static_cast<std::uint32_t>(length + 1)) == output);
|
|
Require(std::strcmp(output, sample.expected) == 0);
|
|
std::memset(output, 'x', sizeof(output));
|
|
*__error_nid_postfix() = 0;
|
|
Require(__inet_ntop_nid_postfix(28, address.data(), output, static_cast<std::uint32_t>(length)) == nullptr);
|
|
Require(*__error_nid_postfix() == 28 && output[0] == 'x');
|
|
}
|
|
address.fill(0xFF);
|
|
char widest[64]{};
|
|
Require(__inet_ntop_nid_postfix(28, address.data(), widest, sizeof(widest)) == widest);
|
|
Require(std::strcmp(widest, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") == 0);
|
|
const unsigned char fourth[4] = {255, 0, 7, 100};
|
|
Require(__inet_ntop_nid_postfix(2, fourth, widest, 12) == widest && std::strcmp(widest, "255.0.7.100") == 0);
|
|
Require(__inet_ntop_nid_postfix(2, fourth, widest, 11) == nullptr && *__error_nid_postfix() == 28);
|
|
Require(__inet_ntop_nid_postfix(10, fourth, widest, sizeof(widest)) == nullptr && *__error_nid_postfix() == 47);
|
|
|
|
CheckConsolePton();
|
|
CheckConsoleNtop();
|
|
CheckConsolePadding(ConsolePaddingBoth, sizeof(ConsolePaddingBoth) / sizeof(ConsolePaddingBoth[0]), __inet_ntop_nid_postfix);
|
|
CheckConsolePadding(ConsolePaddingBoth, sizeof(ConsolePaddingBoth) / sizeof(ConsolePaddingBoth[0]), inet_ntop_nid_postfix);
|
|
CheckConsolePadding(ConsolePaddingUnderscored, sizeof(ConsolePaddingUnderscored) / sizeof(ConsolePaddingUnderscored[0]), __inet_ntop_nid_postfix);
|
|
CheckConsolePadding(ConsolePaddingLarge, sizeof(ConsolePaddingLarge) / sizeof(ConsolePaddingLarge[0]), __inet_ntop_nid_postfix);
|
|
CheckConsolePadding(ConsolePaddingLarge, sizeof(ConsolePaddingLarge) / sizeof(ConsolePaddingLarge[0]), inet_ntop_nid_postfix);
|
|
CheckNullPointers();
|
|
CheckErrnoKept();
|
|
}
|