@@ -177,7 +177,7 @@ lws_adns_iterate(lws_adns_q_t *q, const uint8_t *pkt, int len,
177177{
178178 const uint8_t * e = pkt + len , * p , * pay ;
179179 struct label_stack stack [8 ];
180- int n = 0 , stp = 0 , ansc , m ;
180+ int n = 0 , stp = 0 , ansc , m , found = 0 ;
181181 uint16_t rrtype , rrpaylen ;
182182 char * sp , inq ;
183183 uint32_t ttl ;
@@ -204,7 +204,7 @@ lws_adns_iterate(lws_adns_q_t *q, const uint8_t *pkt, int len,
204204
205205 while (p + 14 < e && (inq || ansc )) {
206206
207- if (!inq && ! stp )
207+ if (!inq )
208208 ansc -- ;
209209
210210 /*
@@ -333,6 +333,7 @@ lws_adns_iterate(lws_adns_q_t *q, const uint8_t *pkt, int len,
333333do_cb :
334334#endif
335335 cb (stack [0 ].name , opaque , ttl , rrtype , rrpaylen , p );
336+ found ++ ;
336337 break ;
337338
338339 case LWS_ADNS_RECORD_CNAME :
@@ -403,6 +404,8 @@ lws_adns_iterate(lws_adns_q_t *q, const uint8_t *pkt, int len,
403404 */
404405 // lwsl_notice("lws_adns_iterate: Calling CB for DNSSEC RR %d (len %d)\n", rrtype, rrpaylen);
405406 cb (stack [0 ].name , opaque , ttl , rrtype , rrpaylen , p );
407+ if (rrtype == LWS_ADNS_RECORD_HTTPS )
408+ found ++ ;
406409 break ;
407410
408411 default :
@@ -423,6 +426,9 @@ lws_adns_iterate(lws_adns_q_t *q, const uint8_t *pkt, int len,
423426 break ;
424427 } while (1 );
425428
429+ if (found )
430+ return 0 ; /* resolved from inside this response */
431+
426432 if (!stp || cb != lws_async_dns_estimate )
427433 return 1 ; /* we didn't find anything, but we didn't error */
428434
@@ -464,6 +470,7 @@ lws_adns_iterate(lws_adns_q_t *q, const uint8_t *pkt, int len,
464470 if (q -> firstcache )
465471 lws_adns_cache_destroy (q -> firstcache );
466472 q -> firstcache = NULL ;
473+ q -> last = NULL ; /* it pointed into the cache we just freed */
467474
468475 /* overwrite the query name with the CNAME */
469476
0 commit comments