aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Winget <tewinget@gmail.com>2015-04-02 09:22:31 -0400
committerThomas Winget <tewinget@gmail.com>2015-04-02 09:22:31 -0400
commitc0de96f8bd2f64884255f9b0b61a4775ada5e3e6 (patch)
tree83d8d74d8a7d94d7dcbe9e512d4263631a59eadc
parentMerge pull request #248 (diff)
downloadmonero-c0de96f8bd2f64884255f9b0b61a4775ada5e3e6.tar.xz
Fixed DNS resolution bug in Windows
Due to a bug in unbound, we were passing a string containing a null character to ub_ctx_resolvconf and ub_ctx_hosts rather than a NULL pointer. On *nix this wasn't causing headache, but on Windows this was causing unbound to not correctly load DNS settings from the OS. Note on the bug: in a Windows-specific code branch in the function ub_ctx_hosts(), if the hosts file specified was a NULL pointer, a call to getenv() was stored in a local char* and later freed. This is incorrect, as we do not own that data, and caused the program to crash.
-rw-r--r--external/unbound/libunbound/libunbound.c1
-rw-r--r--src/common/dns_utils.cpp6
2 files changed, 2 insertions, 5 deletions
diff --git a/external/unbound/libunbound/libunbound.c b/external/unbound/libunbound/libunbound.c
index 91a663a77..af2ca0d30 100644
--- a/external/unbound/libunbound/libunbound.c
+++ b/external/unbound/libunbound/libunbound.c
@@ -1028,7 +1028,6 @@ ub_ctx_hosts(struct ub_ctx* ctx, const char* fname)
"\\hosts");
retval=ub_ctx_hosts(ctx, buf);
}
- free(name);
return retval;
}
return UB_READFILE;
diff --git a/src/common/dns_utils.cpp b/src/common/dns_utils.cpp
index 4ab93cce8..2ac49bf4b 100644
--- a/src/common/dns_utils.cpp
+++ b/src/common/dns_utils.cpp
@@ -162,11 +162,9 @@ DNSResolver::DNSResolver() : m_data(new DNSResolverData())
// init libunbound context
m_data->m_ub_context = ub_ctx_create();
- char empty_string = '\0';
-
// look for "/etc/resolv.conf" and "/etc/hosts" or platform equivalent
- ub_ctx_resolvconf(m_data->m_ub_context, &empty_string);
- ub_ctx_hosts(m_data->m_ub_context, &empty_string);
+ ub_ctx_resolvconf(m_data->m_ub_context, NULL);
+ ub_ctx_hosts(m_data->m_ub_context, NULL);
ub_ctx_add_ta(m_data->m_ub_context, ::get_builtin_ds());
}