It was possible to reach add_link() without visiting an
intermediate node first, and the check for a duplicate entry
could then cause a crash.
Credit to OSS-Fuzz for discovering this error.
static inline void
add_link(dns_qpchain_t *chain, dns_qpnode_t *node, size_t offset) {
/* prevent duplication */
- if (chain->chain[chain->len - 1].node == node) {
+ if (chain->len != 0 && chain->chain[chain->len - 1].node == node) {
return;
}
chain->chain[chain->len].node = node;