+4187. [func] When any RR type implementation doesn't
+ implement totext() for the RDATA's wire
+ representation and returns ISC_R_NOTIMPLEMENTED,
+ such RDATA is now printed in unknown
+ presentation format (RFC 3597). RR types affected
+ include LOC(29) and APL(42). [RT #40317].
+
4183. [cleanup] Use timing-safe memory comparisons in cryptographic
code. Also, the timing-safe comparison functions have
been renamed to avoid possible confusion with
{
isc_result_t result = ISC_R_NOTIMPLEMENTED;
isc_boolean_t use_default = ISC_FALSE;
+ unsigned int cur;
REQUIRE(rdata != NULL);
REQUIRE(tctx->origin == NULL ||
return (ISC_R_SUCCESS);
}
+ cur = isc_buffer_usedlength(target);
+
TOTEXTSWITCH
- if (use_default)
+ if (use_default || (result == ISC_R_NOTIMPLEMENTED)) {
+ unsigned int u = isc_buffer_usedlength(target);
+
+ INSIST(u >= cur);
+ isc_buffer_subtract(target, u - cur);
result = unknown_totext(rdata, tctx, target);
+ }
return (result);
}
dns_rdata_toregion(rdata, &sr);
- /* version = sr.base[0]; */
+ if (sr.base[0] != 0)
+ return (ISC_R_NOTIMPLEMENTED);
+
+ REQUIRE(rdata->length == 16);
+
size = sr.base[1];
INSIST((size&0x0f) < 10 && (size>>4) < 10);
if ((size&0x0f)> 1)
isc_buffer_activeregion(source, &sr);
if (sr.length < 1)
return (ISC_R_UNEXPECTEDEND);
- if (sr.base[0] != 0)
- return (ISC_R_NOTIMPLEMENTED);
+ if (sr.base[0] != 0) {
+ /* Treat as unknown. */
+ isc_buffer_forward(source, sr.length);
+ return (mem_tobuffer(target, sr.base, sr.length));
+ }
if (sr.length < 16)
return (ISC_R_UNEXPECTEDEND);