From: Wouter Wijngaards Date: Mon, 9 Aug 2010 13:36:29 +0000 (+0000) Subject: Justin's items 1 and 2. X-Git-Tag: release-1.6.7~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea9adc6d78f5aff787db4376140beaeb35daaf78;p=thirdparty%2Fldns.git Justin's items 1 and 2. --- diff --git a/compat/b32_ntop.c b/compat/b32_ntop.c index 6f534cc8..52f63611 100644 --- a/compat/b32_ntop.c +++ b/compat/b32_ntop.c @@ -254,40 +254,55 @@ ldns_b32_ntop_ar(uint8_t const *src, size_t srclength, char *target, size_t targ } target[datalength++] = B32_ar[output[0]]; if (srclength >= 1) { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = B32_ar[output[1]]; if (srclength == 1 && output[2] == 0) { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = Pad32; } else { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = B32_ar[output[2]]; } } else { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = Pad32; + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = Pad32; } if (srclength >= 2) { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = B32_ar[output[3]]; } else { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = Pad32; } if (srclength >= 3) { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = B32_ar[output[4]]; if (srclength == 3 && output[5] == 0) { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = Pad32; } else { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = B32_ar[output[5]]; } } else { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = Pad32; + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = Pad32; } if (srclength >= 4) { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = B32_ar[output[6]]; } else { + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = Pad32; } + if (datalength + 1 > targsize) { return (-2); } target[datalength++] = Pad32; } - if (datalength > targsize) { + if (datalength+1 > targsize) { return (-3); } target[datalength] = '\0'; /* Returned value doesn't count \0. */