]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[v9_6] change 3630 incomplete--needed to check fromtext too
authorEvan Hunt <each@isc.org>
Thu, 15 Aug 2013 00:25:07 +0000 (17:25 -0700)
committerEvan Hunt <each@isc.org>
Thu, 15 Aug 2013 00:25:07 +0000 (17:25 -0700)
(cherry picked from commit 5f630b9417a01321f73662202e63922eccea5900)

lib/dns/rdata/generic/dnskey_48.c
lib/dns/rdata/generic/key_25.c

index 21533e343346353982556fbd03467c18750f6676..77de2ba19143227e77dd7ab18acbdfc13be8b8e4 100644 (file)
@@ -32,6 +32,7 @@
 
 static inline isc_result_t
 fromtext_dnskey(ARGS_FROMTEXT) {
+       isc_result_t result;
        isc_token_t token;
        dns_secalg_t alg;
        dns_secproto_t proto;
@@ -67,7 +68,15 @@ fromtext_dnskey(ARGS_FROMTEXT) {
        if ((flags & 0xc000) == 0xc000)
                return (ISC_R_SUCCESS);
 
-       return (isc_base64_tobuffer(lexer, target, -1));
+       result = isc_base64_tobuffer(lexer, target, -1);
+       if (result != ISC_R_SUCCESS)
+               return (result);
+
+       /* Ensure there's at least enough data to compute a key ID for MD5 */
+       if (alg == DST_ALG_RSAMD5 && isc_buffer_usedlength(target) < 7)
+               return (ISC_R_UNEXPECTEDEND);
+
+       return (ISC_R_SUCCESS);
 }
 
 static inline isc_result_t
index 55da3256c7090cef87f0f5be3fa42b8b33f7f95f..0b3a21c78bd6803672943c1f1412670f34ca42ef 100644 (file)
@@ -32,6 +32,7 @@
 
 static inline isc_result_t
 fromtext_key(ARGS_FROMTEXT) {
+       isc_result_t result;
        isc_token_t token;
        dns_secalg_t alg;
        dns_secproto_t proto;
@@ -67,7 +68,15 @@ fromtext_key(ARGS_FROMTEXT) {
        if ((flags & 0xc000) == 0xc000)
                return (ISC_R_SUCCESS);
 
-       return (isc_base64_tobuffer(lexer, target, -1));
+       result = isc_base64_tobuffer(lexer, target, -1);
+       if (result != ISC_R_SUCCESS)
+               return (result);
+
+       /* Ensure there's at least enough data to compute a key ID for MD5 */
+       if (alg == DST_ALG_RSAMD5 && isc_buffer_usedlength(target) < 7)
+               return (ISC_R_UNEXPECTEDEND);
+
+       return (ISC_R_SUCCESS);
 }
 
 static inline isc_result_t