1 #include <cgreen/cgreen.h>
2 #include <cgreen/mocks.h>
3 #include "../rdesktop.h"
4 
5 char g_codepage[16];
6 
7 /* Boilerplate */
8 Describe(ASN1);
BeforeEach(ASN1)9 BeforeEach(ASN1) {}
AfterEach(ASN1)10 AfterEach(ASN1) {}
11 
12 /* malloc; exit if out of memory */
13 void *
xmalloc(int size)14 xmalloc(int size)
15 {
16 	void *mem = malloc(size);
17 	if (mem == NULL)
18 	{
19 		logger(Core, Error, "xmalloc, failed to allocate %d bytes", size);
20 		exit(EX_UNAVAILABLE);
21 	}
22 	return mem;
23 }
24 
25 /* realloc; exit if out of memory */
26 void *
xrealloc(void * oldmem,size_t size)27 xrealloc(void *oldmem, size_t size)
28 {
29 	void *mem;
30 
31 	if (size == 0)
32 		size = 1;
33 	mem = realloc(oldmem, size);
34 	if (mem == NULL)
35 	{
36 		logger(Core, Error, "xrealloc, failed to reallocate %ld bytes", size);
37 		exit(EX_UNAVAILABLE);
38 	}
39 	return mem;
40 }
41 
42 /* free */
43 void
xfree(void * mem)44 xfree(void *mem)
45 {
46 	free(mem);
47 }
48 
Ensure(ASN1,can_create_empty_sequence)49 Ensure(ASN1, can_create_empty_sequence)
50 {
51   struct stream *s, *empty;
52   uint8_t expected_data[] = {0x30, 0x00};
53 
54   s = s_alloc(100);
55   empty = s_alloc(100);
56 
57   ber_out_sequence(s, empty);
58   s_mark_end(s);
59 
60   assert_that(s_length(s), is_equal_to(sizeof(expected_data)));
61   assert_that(s->data, is_equal_to_contents_of(expected_data, sizeof(expected_data)));
62 }
63 
Ensure(ASN1,can_create_empty_sequence_using_null)64 Ensure(ASN1, can_create_empty_sequence_using_null)
65 {
66   struct stream *s;
67   uint8_t expected_data[] = {0x30, 0x00};
68 
69   s = s_alloc(100);
70 
71   ber_out_sequence(s, NULL);
72   s_mark_end(s);
73 
74   assert_that(s_length(s), is_equal_to(sizeof(expected_data)));
75   assert_that(s->data, is_equal_to_contents_of(expected_data, sizeof(expected_data)));
76 }
77 
Ensure(ASN1,can_create_sequence_of_two_integers)78 Ensure(ASN1, can_create_sequence_of_two_integers)
79 {
80   struct stream *s, *content;
81   uint8_t expected_data[] = {0x30, 0x08, 0x02, 0x02, 0x00, 0xbe, 0x02, 0x02, 0x00, 0xef};
82 
83   s = s_alloc(100);
84   content = s_alloc(100);
85 
86   ber_out_integer(content, 0xbe);
87   ber_out_integer(content, 0xef);
88   s_mark_end(content);
89 
90   ber_out_sequence(s, content);
91   s_mark_end(s);
92 
93   assert_that(s_length(s), is_equal_to(sizeof(expected_data)));
94   assert_that(s->data, is_equal_to_contents_of(expected_data, sizeof(expected_data)));
95 }
96 
Ensure(ASN1,can_create_sequence_of_one_integer)97 Ensure(ASN1, can_create_sequence_of_one_integer)
98 {
99   struct stream *s, *content;
100   uint8_t expected_data[] = {0x30, 0x04, 0x02, 0x02, 0x00, 0xbe};
101 
102   s = s_alloc(100);
103   content = s_alloc(100);
104 
105   ber_out_integer(content, 0xbe);
106   s_mark_end(content);
107 
108   ber_out_sequence(s, content);
109   s_mark_end(s);
110 
111   assert_that(s_length(s), is_equal_to(sizeof(expected_data)));
112   assert_that(s->data, is_equal_to_contents_of(expected_data, sizeof(expected_data)));
113 }
114