summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@zip.com.au>2007-02-19 22:56:55 +1100
committerDarren Tucker <dtucker@zip.com.au>2007-02-19 22:56:55 +1100
commit89ee69e3c639b55b7577ba8fde66450446f74ea4 (patch)
tree36bd6f19e797181541d39013081a782d54e27358
parent53ced25d6185b4a02305e9d4bf648113155dde07 (diff)
- (dtucker) [openbsd-compat/getrrsetbyname.c] Don't attempt to calloc
an array for signatures when there are none since "calloc(0, n) returns NULL on some platforms (eg Tru64), which is explicitly permitted by POSIX. Diagnosis and patch by svallet genoscope.cns.fr.
-rw-r--r--ChangeLog6
-rw-r--r--openbsd-compat/getrrsetbyname.c10
2 files changed, 11 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 6f01b02a..434fcafd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -43,6 +43,10 @@
offsite. ok djm@, man page bits ok jmc@
- (dtucker) [contrib/findssl.sh] Add "which" as a shell function since some
platforms don't have it. Patch from dleonard at vintela.com.
+ - (dtucker) [openbsd-compat/getrrsetbyname.c] Don't attempt to calloc
+ an array for signatures when there are none since "calloc(0, n) returns
+ NULL on some platforms (eg Tru64), which is explicitly permitted by
+ POSIX. Diagnosis and patch by svallet genoscope.cns.fr.
20070128
- (djm) [channels.c serverloop.c] Fix so-called "hang on exit" (bz #52)
@@ -2738,4 +2742,4 @@
OpenServer 6 and add osr5bigcrypt support so when someone migrates
passwords between UnixWare and OpenServer they will still work. OK dtucker@
-$Id: ChangeLog,v 1.4618 2007/02/19 11:44:25 dtucker Exp $
+$Id: ChangeLog,v 1.4619 2007/02/19 11:56:55 dtucker Exp $
diff --git a/openbsd-compat/getrrsetbyname.c b/openbsd-compat/getrrsetbyname.c
index 6c86e02c..07231d00 100644
--- a/openbsd-compat/getrrsetbyname.c
+++ b/openbsd-compat/getrrsetbyname.c
@@ -303,10 +303,12 @@ getrrsetbyname(const char *hostname, unsigned int rdclass,
}
/* allocate memory for signatures */
- rrset->rri_sigs = calloc(rrset->rri_nsigs, sizeof(struct rdatainfo));
- if (rrset->rri_sigs == NULL) {
- result = ERRSET_NOMEMORY;
- goto fail;
+ if (rrset->rri_nsigs > 0) {
+ rrset->rri_sigs = calloc(rrset->rri_nsigs, sizeof(struct rdatainfo));
+ if (rrset->rri_sigs == NULL) {
+ result = ERRSET_NOMEMORY;
+ goto fail;
+ }
}
/* copy answers & signatures */