Module: wine Branch: master Commit: 55b3e6095b05ded653bb3a79af94d560e89cb222 URL: https://gitlab.winehq.org/wine/wine/-/commit/55b3e6095b05ded653bb3a79af94d56...
Author: Huw Davies huw@codeweavers.com Date: Thu Dec 21 13:47:10 2023 +0000
dnsapi: Update the array ptr in the insufficient buffer case.
Fixes a regression caused by da65aa5b747d.
---
dlls/dnsapi/query.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/dlls/dnsapi/query.c b/dlls/dnsapi/query.c index d5f46d0a32e..a28d98fc328 100644 --- a/dlls/dnsapi/query.c +++ b/dlls/dnsapi/query.c @@ -329,9 +329,9 @@ static DNS_STATUS get_hostname_w( COMPUTER_NAME_FORMAT format, PWSTR buffer, PDW static DNS_STATUS get_dns_server_list( IP4_ARRAY *out, DWORD *len ) { char buf[FIELD_OFFSET(DNS_ADDR_ARRAY, AddrArray[3])]; - DNS_ADDR_ARRAY *servers = (DNS_ADDR_ARRAY *)buf; DWORD ret, needed, i, num, array_len = sizeof(buf); - struct get_serverlist_params params = { AF_INET, servers, &array_len }; + struct get_serverlist_params params = { AF_INET, (DNS_ADDR_ARRAY *)buf, &array_len }; + for (;;) { ret = RESOLV_CALL( get_serverlist, ¶ms ); @@ -346,9 +346,9 @@ static DNS_STATUS get_dns_server_list( IP4_ARRAY *out, DWORD *len ) } if (!ret) break;
- if ((char *)servers != buf) free( servers ); - servers = malloc( array_len ); - if (!servers) + if ((char *)params.addrs != buf) free( params.addrs ); + params.addrs = malloc( array_len ); + if (!params.addrs) { ret = ERROR_NOT_ENOUGH_MEMORY; goto err; @@ -357,12 +357,12 @@ static DNS_STATUS get_dns_server_list( IP4_ARRAY *out, DWORD *len )
out->AddrCount = num; for (i = 0; i < num; i++) - out->AddrArray[i] = ((SOCKADDR_IN *)servers->AddrArray[i].MaxSa)->sin_addr.s_addr; + out->AddrArray[i] = ((SOCKADDR_IN *)params.addrs->AddrArray[i].MaxSa)->sin_addr.s_addr; *len = needed; ret = ERROR_SUCCESS;
err: - if ((char *)servers != buf) free( servers ); + if ((char *)params.addrs != buf) free( params.addrs ); return ret; }