diff options
author | Ulrich Drepper <drepper@redhat.com> | 2010-04-09 21:38:20 -0700 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2010-04-09 21:38:20 -0700 |
commit | ea42a20caed5b343ff20a0d4622ae6c17b77161b (patch) | |
tree | d4d57d9ea754be4d720e7946b5e439e4cea45505 /nscd | |
parent | 17ad3877276b37af45c380b07b975406cf2e95de (diff) | |
download | glibc-ea42a20caed5b343ff20a0d4622ae6c17b77161b.tar.gz glibc-ea42a20caed5b343ff20a0d4622ae6c17b77161b.tar.xz glibc-ea42a20caed5b343ff20a0d4622ae6c17b77161b.zip |
Fix crash on reloading of gai data in nscd.
Diffstat (limited to 'nscd')
-rw-r--r-- | nscd/aicache.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/nscd/aicache.c b/nscd/aicache.c index 992357d2fe..3cb2208035 100644 --- a/nscd/aicache.c +++ b/nscd/aicache.c @@ -1,5 +1,5 @@ /* Cache handling for host lookup. - Copyright (C) 2004-2008, 2009 Free Software Foundation, Inc. + Copyright (C) 2004-2008, 2009, 2010 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. @@ -111,7 +111,7 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, int old_res_options = _res.options; _res.options &= ~RES_USE_INET6; - size_t tmpbuf6len = 512; + size_t tmpbuf6len = 1024; char *tmpbuf6 = alloca (tmpbuf6len); size_t tmpbuf4len = 0; char *tmpbuf4 = NULL; @@ -133,9 +133,11 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, "gethostbyname4_r"); if (fct4 != NULL) { - struct gaih_addrtuple *at = NULL; + struct gaih_addrtuple atmem; + struct gaih_addrtuple *at; while (1) { + at = &atmem; rc6 = 0; herrno = 0; status[1] = DL_CALL_FCT (fct4, (key, &at, tmpbuf6, tmpbuf6len, @@ -153,7 +155,7 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, goto next_nip; /* We found the data. Count the addresses and the size. */ - for (const struct gaih_addrtuple *at2 = at; at2 != NULL; + for (const struct gaih_addrtuple *at2 = at = &atmem; at2 != NULL; at2 = at2->next) { ++naddrs; |