links

lynx-like text mode web browser
git clone anongit@rnpnr.xyz:links.git
Log | Files | Refs | Feed | README | LICENSE

Commit: 7489e152d5952c088b24dd2f8766fe637ff5d746
Parent: 38c28fd6383a75062944b3b5062d7974eb65425d
Author: opask
Date:   Thu, 30 Aug 2018 22:14:25 -0600

revert most of 38c28fd, cleanup introduced warnings

Diffstat:
MTODO | 2++
Mdns.c | 16++++++++--------
2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/TODO b/TODO @@ -49,3 +49,5 @@ being (mis)used as one. there are a number of places where this results in use of out of bounds memory. these NEED to be fixed, its amazing the code ever worked at all + - not necessarily correct, however the code should be simplified to be + more understandable. diff --git a/dns.c b/dns.c @@ -12,7 +12,7 @@ struct dnsentry { uttime absolute_time; struct lookup_result addr; list_entry_last - char name; + char name[1]; }; struct dnsquery { @@ -22,7 +22,7 @@ struct dnsquery { struct dnsquery **s; struct lookup_result *addr; int addr_preference; - char name; + char name[1]; }; static int dns_cache_addr_preference = -1; @@ -269,7 +269,7 @@ ret: static int do_lookup(struct dnsquery *q, int force_async) { - do_real_lookup(q->name, q->addr_preference, q->addr); + do_real_lookup((unsigned char *)q->name, q->addr_preference, q->addr); end_dns_lookup(q, !q->addr->n); return 0; } @@ -293,7 +293,7 @@ static int find_in_dns_cache(unsigned char *name, struct dnsentry **dnsentry) struct list_head *le; check_dns_cache_addr_preference(); foreach(struct dnsentry, e, le, dns_cache) - if (!casestrcmp(e->name, name)) { + if (!casestrcmp((unsigned char *)e->name, name)) { del_from_list(e); add_to_list(dns_cache, e); *dnsentry = e; @@ -317,7 +317,7 @@ static void end_dns_lookup(struct dnsquery *q, int a) free(q); return; } - if (!find_in_dns_cache(q->name, &dnsentry)) { + if (!find_in_dns_cache((unsigned char *)q->name, &dnsentry)) { if (a) { memcpy(q->addr, &dnsentry->addr, sizeof(struct lookup_result)); a = 0; @@ -330,8 +330,8 @@ static void end_dns_lookup(struct dnsquery *q, int a) if (q->addr_preference != ipv6_options.addr_preference) goto e; check_dns_cache_addr_preference(); - dnsentry = xmalloc(sizeof(struct dnsentry)); - dnsentry->name = q->name; + dnsentry = xmalloc(sizeof(struct dnsentry) + strlen(q->name)); + strcpy(dnsentry->name, q->name); memcpy(&dnsentry->addr, q->addr, sizeof(struct lookup_result)); dnsentry->absolute_time = get_absolute_time(); add_to_list(dns_cache, dnsentry); @@ -360,7 +360,7 @@ int find_host_no_cache(unsigned char *name, struct lookup_result *addr, void **q q->s = (struct dnsquery **)qp; q->addr = addr; q->addr_preference = ipv6_options.addr_preference; - q->name = name[0]; + strcpy(q->name, (char *)name); if (qp) *qp = q; return do_queued_lookup(q);