16dce56b2SKevin Athey // RUN: %clangxx %s -o %t && %run %t %p
221f2ac9aSKevin Athey 
31a729bceSKevin Athey #include <assert.h>
41a729bceSKevin Athey #include <resolv.h>
51a729bceSKevin Athey #include <string.h>
61a729bceSKevin Athey 
7*d1b7d57cSVitaly Buka #include "sanitizer_common/sanitizer_specific.h"
81a729bceSKevin Athey 
testWrite()91a729bceSKevin Athey void testWrite() {
101a729bceSKevin Athey   char unsigned input[] = {0xff, 0xc5, 0xf7, 0xff, 0x00, 0x00, 0xff, 0x0a, 0x00,
111a729bceSKevin Athey                            0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
121a729bceSKevin Athey                            0x10, 0x01, 0x05, 0x00, 0x01, 0x0a, 0x67, 0x6f, 0x6f,
131a729bceSKevin Athey                            0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x00};
141a729bceSKevin Athey   char output[1024];
151a729bceSKevin Athey 
161a729bceSKevin Athey   int res = dn_expand(input, input + sizeof(input), input + 23, output,
171a729bceSKevin Athey                       sizeof(output));
181a729bceSKevin Athey 
191a729bceSKevin Athey   assert(res == 12);
201a729bceSKevin Athey   assert(strcmp(output, "google\\.com") == 0);
21*d1b7d57cSVitaly Buka   check_mem_is_good(output, strlen(output) + 1);
221a729bceSKevin Athey }
231a729bceSKevin Athey 
testWriteZeroLength()241a729bceSKevin Athey void testWriteZeroLength() {
251a729bceSKevin Athey   char unsigned input[] = {
261a729bceSKevin Athey       0xff, 0xc5, 0xf7, 0xff, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x01,
271a729bceSKevin Athey       0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x10, 0x01, 0x05, 0x00, 0x01, 0x00,
281a729bceSKevin Athey   };
291a729bceSKevin Athey   char output[1024];
301a729bceSKevin Athey 
311a729bceSKevin Athey   int res = dn_expand(input, input + sizeof(input), input + 23, output,
321a729bceSKevin Athey                       sizeof(output));
331a729bceSKevin Athey 
341a729bceSKevin Athey   assert(res == 1);
351a729bceSKevin Athey   assert(strcmp(output, "") == 0);
36*d1b7d57cSVitaly Buka   check_mem_is_good(output, strlen(output) + 1);
371a729bceSKevin Athey }
381a729bceSKevin Athey 
testComp()39ba4435ebSVitaly Buka void testComp() {
40ba4435ebSVitaly Buka   char unsigned msg[1024];
41ba4435ebSVitaly Buka   char unsigned *mb = msg;
42ba4435ebSVitaly Buka   char unsigned *me = msg + sizeof(msg);
43ba4435ebSVitaly Buka   char unsigned **pb = (char unsigned **)mb;
44ba4435ebSVitaly Buka   pb[0] = msg;
45ba4435ebSVitaly Buka   pb[1] = nullptr;
46ba4435ebSVitaly Buka   mb += 64;
47ba4435ebSVitaly Buka   char unsigned **pe = (char unsigned **)mb;
48ba4435ebSVitaly Buka 
49ba4435ebSVitaly Buka   char unsigned *n1 = mb;
50ba4435ebSVitaly Buka   int res = dn_comp("llvm.org", mb, me - mb, pb, pe);
51ba4435ebSVitaly Buka   assert(res == 10);
52ba4435ebSVitaly Buka   mb += res;
53ba4435ebSVitaly Buka 
54ba4435ebSVitaly Buka   char unsigned *n2 = mb;
55ba4435ebSVitaly Buka   res = dn_comp("lab.llvm.org", mb, me - mb, pb, pe);
56ba4435ebSVitaly Buka   assert(res == 6);
57ba4435ebSVitaly Buka   mb += res;
58ba4435ebSVitaly Buka 
59ba4435ebSVitaly Buka   {
60ba4435ebSVitaly Buka     char output[1024];
61ba4435ebSVitaly Buka     res = dn_expand(msg, msg + sizeof(msg), n1, output, sizeof(output));
62ba4435ebSVitaly Buka 
63ba4435ebSVitaly Buka     fprintf(stderr, "%d\n", res);
64ba4435ebSVitaly Buka     assert(res == 10);
65ba4435ebSVitaly Buka     assert(strcmp(output, "llvm.org") == 0);
66*d1b7d57cSVitaly Buka     check_mem_is_good(output, strlen(output) + 1);
67ba4435ebSVitaly Buka   }
68ba4435ebSVitaly Buka 
69ba4435ebSVitaly Buka   {
70ba4435ebSVitaly Buka     char output[1024];
71ba4435ebSVitaly Buka     res = dn_expand(msg, msg + sizeof(msg), n2, output, sizeof(output));
72ba4435ebSVitaly Buka 
73ba4435ebSVitaly Buka     assert(res == 6);
74ba4435ebSVitaly Buka     assert(strcmp(output, "lab.llvm.org") == 0);
75*d1b7d57cSVitaly Buka     check_mem_is_good(output, strlen(output) + 1);
76ba4435ebSVitaly Buka   }
77ba4435ebSVitaly Buka }
78ba4435ebSVitaly Buka 
main(int iArgc,const char * szArgv[])791a729bceSKevin Athey int main(int iArgc, const char *szArgv[]) {
801a729bceSKevin Athey   testWrite();
811a729bceSKevin Athey   testWriteZeroLength();
82ba4435ebSVitaly Buka   testComp();
831a729bceSKevin Athey 
841a729bceSKevin Athey   return 0;
851a729bceSKevin Athey }
86