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