1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
//===-- Unittests for inet_aton -------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "src/arpa/inet/htonl.h"
#include "src/arpa/inet/inet_aton.h"
#include "test/UnitTest/Test.h"
namespace LIBC_NAMESPACE_DECL {
TEST(LlvmLibcInetAton, ValidTest) {
in_addr a;
// a.b.c.d
a.s_addr = 0;
ASSERT_EQ(1, inet_aton("127.1.2.4", &a));
ASSERT_EQ(htonl(0x7f010204), a.s_addr);
// a.b.c
a.s_addr = 0;
ASSERT_EQ(1, inet_aton("127.1.4", &a));
ASSERT_EQ(htonl(0x7f010004), a.s_addr);
// a.b
a.s_addr = 0;
ASSERT_EQ(1, inet_aton("127.1", &a));
ASSERT_EQ(htonl(0x7f000001), a.s_addr);
// a
a.s_addr = 0;
ASSERT_EQ(1, inet_aton("0x7f000001", &a));
ASSERT_EQ(htonl(0x7f000001), a.s_addr);
// Hex (0x) and mixed-case hex digits.
a.s_addr = 0;
ASSERT_EQ(1, inet_aton("0xFf.0.0.1", &a));
ASSERT_EQ(htonl(0xff000001), a.s_addr);
// Hex (0X) and mixed-case hex digits.
a.s_addr = 0;
ASSERT_EQ(1, inet_aton("0XfF.0.0.1", &a));
ASSERT_EQ(htonl(0xff000001), a.s_addr);
// Octal.
a.s_addr = 0;
ASSERT_EQ(1, inet_aton("0177.0.0.1", &a));
ASSERT_EQ(htonl(0x7f000001), a.s_addr);
a.s_addr = 0;
ASSERT_EQ(1, inet_aton("036", &a));
ASSERT_EQ(htonl(036U), a.s_addr);
}
TEST(LlvmLibcInetAton, InvalidTest) {
ASSERT_EQ(0, inet_aton("", nullptr)); // Empty.
ASSERT_EQ(0, inet_aton("x", nullptr)); // Leading junk.
ASSERT_EQ(0, inet_aton("127.0.0.1x", nullptr)); // Trailing junk.
ASSERT_EQ(0, inet_aton("09.0.0.1", nullptr)); // Invalid octal.
ASSERT_EQ(0, inet_aton("0xg.0.0.1", nullptr)); // Invalid hex.
ASSERT_EQ(0, inet_aton("1.2.3.4.5", nullptr)); // Too many dots.
ASSERT_EQ(0, inet_aton("1.2.3.4.", nullptr)); // Trailing dot.
// Out of range a.b.c.d form.
ASSERT_EQ(0, inet_aton("999.0.0.1", nullptr));
ASSERT_EQ(0, inet_aton("0.999.0.1", nullptr));
ASSERT_EQ(0, inet_aton("0.0.999.1", nullptr));
ASSERT_EQ(0, inet_aton("0.0.0.999", nullptr));
// Out of range a.b.c form.
ASSERT_EQ(0, inet_aton("256.0.0", nullptr));
ASSERT_EQ(0, inet_aton("0.256.0", nullptr));
ASSERT_EQ(0, inet_aton("0.0.0x10000", nullptr));
// Out of range a.b form.
ASSERT_EQ(0, inet_aton("256.0", nullptr));
ASSERT_EQ(0, inet_aton("0.0x1000000", nullptr));
// Out of range a form.
ASSERT_EQ(0, inet_aton("0x100000000", nullptr));
// 64-bit overflow.
ASSERT_EQ(0, inet_aton("0x10000000000000000", nullptr));
// Out of range octal.
ASSERT_EQ(0, inet_aton("0400.0.0.1", nullptr));
}
} // namespace LIBC_NAMESPACE_DECL
|