1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#include "qemu/osdep.h"
22#include <glib.h>
23
24#include "qapi/error.h"
25#include "qemu/base64.h"
26
27static void test_base64_good(void)
28{
29 const char input[] =
30 "QmVjYXVzZSB3ZSBmb2N1c2VkIG9uIHRoZSBzbmFrZSwgd2UgbW\n"
31 "lzc2VkIHRoZSBzY29ycGlvbi4=";
32 const char expect[] = "Because we focused on the snake, "
33 "we missed the scorpion.";
34
35 size_t len;
36 uint8_t *actual = qbase64_decode(input,
37 -1,
38 &len,
39 &error_abort);
40
41 g_assert(actual != NULL);
42 g_assert_cmpint(len, ==, strlen(expect));
43 g_assert_cmpstr((char *)actual, ==, expect);
44 g_free(actual);
45}
46
47
48static void test_base64_bad(const char *input,
49 size_t input_len)
50{
51 size_t len;
52 Error *err = NULL;
53 uint8_t *actual = qbase64_decode(input,
54 input_len,
55 &len,
56 &err);
57
58 g_assert(err != NULL);
59 g_assert(actual == NULL);
60 g_assert_cmpint(len, ==, 0);
61 error_free(err);
62}
63
64
65static void test_base64_embedded_nul(void)
66{
67
68
69 const char input[] =
70 "QmVjYXVzZSB3ZSBmb2N1c2VkIG9uIHRoZSBzbmFrZSwgd2UgbW\0"
71 "lzc2VkIHRoZSBzY29ycGlvbi4=";
72
73 test_base64_bad(input, G_N_ELEMENTS(input) - 1);
74}
75
76
77static void test_base64_not_nul_terminated(void)
78{
79 const char input[] =
80 "QmVjYXVzZSB3ZSBmb2N1c2VkIG9uIHRoZSBzbmFrZSwgd2UgbW\n"
81 "lzc2VkIHRoZSBzY29ycGlvbi4=";
82
83
84
85 test_base64_bad(input, G_N_ELEMENTS(input) - 2);
86}
87
88
89static void test_base64_invalid_chars(void)
90{
91
92
93 const char input[] =
94 "QmVjYXVzZSB3ZSBmb2N1c2VkIG9uIHRoZSBzbmFrZSwgd2UgbW'"
95 "lzc2VkIHRoZSBzY29ycGlvbi4=";
96
97 test_base64_bad(input, strlen(input));
98}
99
100
101int main(int argc, char **argv)
102{
103 g_test_init(&argc, &argv, NULL);
104 g_test_add_func("/util/base64/good", test_base64_good);
105 g_test_add_func("/util/base64/embedded-nul", test_base64_embedded_nul);
106 g_test_add_func("/util/base64/not-nul-terminated",
107 test_base64_not_nul_terminated);
108 g_test_add_func("/util/base64/invalid-chars", test_base64_invalid_chars);
109 return g_test_run();
110}
111