The following code segfaults with at least glibc >= 2.7 (and CVS). It works correctly with versions 2.3.X. I have tested versions in between.
#define _GNU_SOURCE
#include <string.h> #include <netdb.h> #include <signal.h> #include <stdio.h>
int main (void) { #define N 10 struct gaicb reqmem[N]; struct gaicb *req[N]; int n;
for (n = 0; n < N; ++n) { asprintf (&reqmem[n].ar_name, "test%d.test.redhat.com", 140 + n); reqmem[n].ar_service = NULL; reqmem[n].ar_request = NULL; reqmem[n].ar_result = NULL; req[n] = &reqmem[n]; }
getaddrinfo_a (GAI_NOWAIT, req, N, NULL);
return 0; }
The following code segfaults with at least glibc >= 2.7 (and CVS). It works
correctly with versions 2.3.X. I have tested versions in between.
#define _GNU_SOURCE
#include <string.h>
#include <netdb.h>
#include <signal.h>
#include <stdio.h>
int
main (void)
{
#define N 10
struct gaicb reqmem[N];
struct gaicb *req[N];
int n;
for (n = 0; n < N; ++n) n].ar_name, "test%d. test.redhat. com", 140 + n); n].ar_service = NULL; n].ar_request = NULL; n].ar_result = NULL;
{
asprintf (&reqmem[
reqmem[
reqmem[
reqmem[
req[n] = &reqmem[n];
}
getaddrinfo_a (GAI_NOWAIT, req, N, NULL);
return 0;
}