From: Huw Davies huw@codeweavers.com
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; }
From: Huw Davies huw@codeweavers.com
--- dlls/dnsapi/libresolv.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/dnsapi/libresolv.c b/dlls/dnsapi/libresolv.c index d68ca1fd9bf..9034651ac6d 100644 --- a/dlls/dnsapi/libresolv.c +++ b/dlls/dnsapi/libresolv.c @@ -192,11 +192,16 @@ static NTSTATUS resolv_get_serverlist( void *args ) if (filter( buf[i].sin.sin_family, params->family )) continue; found++; } - if (!found) return DNS_ERROR_NO_DNS_SERVERS; + if (!found) + { + free( buf ); + return DNS_ERROR_NO_DNS_SERVERS; + }
needed = FIELD_OFFSET(DNS_ADDR_ARRAY, AddrArray[found]); if (!addrs || *params->len < needed) { + free( buf ); *params->len = needed; return !addrs ? ERROR_SUCCESS : ERROR_MORE_DATA; }
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=141427
Your paranoid android.
=== debian11b (64 bit WoW report) ===
Report validation errors: mfmediaengine:mfmediaengine crashed (80000101)