From b4937a448bcd897c84de6abb36c39eff492a2b91 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 8 Jan 2008 07:12:41 +0000 Subject: test to make sure the buffers used by the gethost*_r functions handle misaligned scratch buffers --- test/inet/gethost_r-align.c | 50 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 test/inet/gethost_r-align.c (limited to 'test') diff --git a/test/inet/gethost_r-align.c b/test/inet/gethost_r-align.c new file mode 100644 index 000000000..53ce93acd --- /dev/null +++ b/test/inet/gethost_r-align.c @@ -0,0 +1,50 @@ +/* Since the reentrant gethost functions take a char * buffer, + * we have to make sure they internally do not assume alignment. + * The actual return values are not relevant. If the test fails, + * it'll be due to an alignment exception which means the test + * app is killed by the kernel. + */ + +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + size_t i; + char buf[1024]; + in_addr_t addr; + + addr = inet_addr("127.0.0.1"); + + for (i = 0; i < sizeof(size_t) * 2; ++i) { + struct hostent hent, *hentres; + int ret, herr; + + printf("Testing misalignment of %2zi bytes: ", i); + + memset(&hent, 0x00, sizeof(hent)); + ret = gethostent_r(&hent, buf + i, sizeof(buf) - i, &hentres, &herr); + printf("%sgethostent_r() ", (ret ? "!!!" : "")); + + memset(&hent, 0x00, sizeof(hent)); + ret = gethostbyname_r("localhost", &hent, buf + i, sizeof(buf) - i, &hentres, &herr); + printf("%sgethostbyname_r() ", (ret ? "!!!" : "")); + + memset(&hent, 0x00, sizeof(hent)); + ret = gethostbyname2_r("localhost", AF_INET, &hent, buf + i, sizeof(buf) - i, &hentres, &herr); + printf("%sgethostbyname2_r() ", (ret ? "!!!" : "")); + + memset(&hent, 0x00, sizeof(hent)); + ret = gethostbyaddr_r(&addr, sizeof(addr), AF_INET, &hent, buf + i, sizeof(buf) - i, &hentres, &herr); + printf("%sgethostbyaddr_r() ", (ret ? "!!!" : "")); + + puts("OK!"); + } + + return 0; +} -- cgit v1.2.3