]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
Rename echconfig SVCB parameter key to ech as per latest RFC draft, but maintain... 165/head
authorAdam Stoler <astoler@akamai.com>
Wed, 23 Mar 2022 19:08:38 +0000 (15:08 -0400)
committerAdam Stoler <astoler@akamai.com>
Thu, 24 Mar 2022 18:12:16 +0000 (14:12 -0400)
Fix off-by-one error in ldns_rdf2buffer_str_svcparams

host2str.c
ldns/rdata.h
str2host.c

index 634c567678e6081ef995f114804522a2568a1b93..45b3f42de65ab9eb998ed54dc8de46cf85dab6b2 100644 (file)
@@ -1482,7 +1482,7 @@ svcparam_ipv4hint2buffer_str(ldns_buffer *output, size_t sz, uint8_t *data)
 }
 
 static ldns_status
-svcparam_echconfig2buffer_str(ldns_buffer *output, size_t sz, uint8_t *data)
+svcparam_ech2buffer_str(ldns_buffer *output, size_t sz, uint8_t *data)
 {
        size_t str_sz = ldns_b64_ntop_calculate_size(sz);
        int written;
@@ -1561,7 +1561,7 @@ ldns_rdf2buffer_str_svcparams(ldns_buffer *output, const ldns_rdf *rdf)
                /* No svcparams is just fine. Just nothing to print. */
                return LDNS_STATUS_OK;
        
-       for (dp = data; dp + 4 < data + sz; dp = next_dp) {
+       for (dp = data; dp + 4 <= data + sz; dp = next_dp) {
                ldns_svcparam_key key    = ldns_read_uint16(dp);
                uint16_t          val_sz = ldns_read_uint16(dp + 2);
 
@@ -1593,8 +1593,8 @@ ldns_rdf2buffer_str_svcparams(ldns_buffer *output, const ldns_rdf *rdf)
                case LDNS_SVCPARAM_KEY_IPV4HINT:
                        st = svcparam_ipv4hint2buffer_str(output, val_sz, dp);
                        break;
-               case LDNS_SVCPARAM_KEY_ECHCONFIG:
-                       st = svcparam_echconfig2buffer_str(output, val_sz, dp);
+               case LDNS_SVCPARAM_KEY_ECH:
+                       st = svcparam_ech2buffer_str(output, val_sz, dp);
                        break;
                case LDNS_SVCPARAM_KEY_IPV6HINT:
                        st = svcparam_ipv6hint2buffer_str(output, val_sz, dp);
index 470810e674cacea7320324ad7e3af7c51b49a7bb..4a7dcb37c08bcdaa4d124b41098c71a15cb5d156 100644 (file)
@@ -178,7 +178,7 @@ enum ldns_enum_svcparam_key
        LDNS_SVCPARAM_KEY_NO_DEFAULT_ALPN       = 2,
        LDNS_SVCPARAM_KEY_PORT                  = 3,
        LDNS_SVCPARAM_KEY_IPV4HINT              = 4,
-       LDNS_SVCPARAM_KEY_ECHCONFIG             = 5,
+       LDNS_SVCPARAM_KEY_ECH                   = 5,
        LDNS_SVCPARAM_KEY_IPV6HINT              = 6,
        LDNS_SVCPARAM_KEY_LAST_KEY              = 6,
        LDNS_SVCPARAM_KEY_RESERVED              = 65535
index b33101b0b8d38d4f53e9457c191972d4f6769156..0639d3f1dc4fc18ba292ca8bbf7ca597448c70a7 100644 (file)
@@ -2076,7 +2076,7 @@ parse_svcparam_ipv4hint(const char **s, uint8_t **dp, uint8_t *eod)
 }
 
 static ldns_status
-parse_svcparam_echconfig(const char **s, uint8_t **dp, uint8_t *eod)                
+parse_svcparam_ech(const char **s, uint8_t **dp, uint8_t *eod)
 {                                                                               
        bool quoted = false;
        const char *b64_str;
@@ -2188,7 +2188,7 @@ static svcparam_key_def svcparam_key_defs[] = { { "mandatory"      ,  9 }
                                               , { "no-default-alpn", 15 }
                                               , { "port"           ,  4 }
                                               , { "ipv4hint"       ,  8 }
-                                              , { "echconfig"      ,  9 }
+                                              , { "ech"            ,  3 }
                                               , { "ipv6hint"       ,  8 } };
 
 static const size_t svcparam_key_defs_len = sizeof(svcparam_key_defs)
@@ -2228,6 +2228,11 @@ parse_svcparam_key(const char **s, ldns_svcparam_key *key)
                        return LDNS_STATUS_OK;
                }
        }
+       /* Also allow "echconfig" from earlier draft versions. */
+       if (len == 9 && !strncmp(key_str, "echconfig", 9)) {
+               *key = LDNS_SVCPARAM_KEY_ECH;
+               return LDNS_STATUS_OK;
+       }
        if (len < 4 || len > 8 || strncmp(key_str, "key", 3))
                return LDNS_STATUS_SYNTAX_SVCPARAM_KEY_ERR;
 
@@ -2287,8 +2292,8 @@ parse_svcparam(const char **s, uint8_t **dp, uint8_t *eod)
        case LDNS_SVCPARAM_KEY_IPV4HINT:
                st = parse_svcparam_ipv4hint(s, dp, eod);
                break;
-       case LDNS_SVCPARAM_KEY_ECHCONFIG:
-               st = parse_svcparam_echconfig(s, dp, eod);
+       case LDNS_SVCPARAM_KEY_ECH:
+               st = parse_svcparam_ech(s, dp, eod);
                break;
        case LDNS_SVCPARAM_KEY_IPV6HINT:
                st = parse_svcparam_ipv6hint(s, dp, eod);