options helpers: fix dereference to properly return params

pull/606/head
Brad House 1 year ago
parent a76c95a6d7
commit 6eff8f65c6
  1. 34
      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;
}

Loading…
Cancel
Save