diff --git a/src/lib/ares_dns_record.c b/src/lib/ares_dns_record.c index 6a58e872..da1ae24e 100644 --- a/src/lib/ares_dns_record.c +++ b/src/lib/ares_dns_record.c @@ -850,25 +850,25 @@ const char *ares_dns_rr_get_str(const ares_dns_rr_t *dns_rr, size_t ares_dns_rr_get_opt_cnt(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key) { - const ares__dns_options_t *opts; + ares__dns_options_t * const *opts; if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_OPT) { return 0; } opts = ares_dns_rr_data_ptr_const(dns_rr, key, NULL); - if (opts == NULL) { + if (opts == NULL || *opts == NULL) { return 0; } - return opts->cnt; + return (*opts)->cnt; } unsigned short ares_dns_rr_get_opt(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, size_t idx, const unsigned char **val, size_t *val_len) { - const ares__dns_options_t *opts; + ares__dns_options_t * const *opts; if (val) { *val = NULL; @@ -882,30 +882,30 @@ unsigned short ares_dns_rr_get_opt(const ares_dns_rr_t *dns_rr, } opts = ares_dns_rr_data_ptr_const(dns_rr, key, NULL); - if (opts == NULL) { + if (opts == NULL || *opts == NULL) { return 65535; } - if (idx >= opts->cnt) { + if (idx >= (*opts)->cnt) { return 65535; } if (val) { - *val = opts->optval[idx].val; + *val = (*opts)->optval[idx].val; } if (val_len) { - *val_len = opts->optval[idx].val_len; + *val_len = (*opts)->optval[idx].val_len; } - return opts->optval[idx].opt; + return (*opts)->optval[idx].opt; } ares_bool_t ares_dns_rr_get_opt_byid(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned short opt, const unsigned char **val, size_t *val_len) { - const ares__dns_options_t *opts; - size_t i; + ares__dns_options_t * const *opts; + size_t i; if (val) { *val = NULL; @@ -919,25 +919,25 @@ ares_bool_t ares_dns_rr_get_opt_byid(const ares_dns_rr_t *dns_rr, } opts = ares_dns_rr_data_ptr_const(dns_rr, key, NULL); - if (opts == NULL) { + if (opts == NULL || *opts == NULL) { return ARES_FALSE; } - for (i = 0; i < opts->cnt; i++) { - if (opts->optval[i].opt == opt) { + for (i = 0; i < (*opts)->cnt; i++) { + if ((*opts)->optval[i].opt == opt) { break; } } - if (i >= opts->cnt) { + if (i >= (*opts)->cnt) { return ARES_FALSE; } if (val) { - *val = opts->optval[i].val; + *val = (*opts)->optval[i].val; } if (val_len) { - *val_len = opts->optval[i].val_len; + *val_len = (*opts)->optval[i].val_len; } return ARES_TRUE; }