summaryrefslogtreecommitdiff
path: root/network_io
diff options
context:
space:
mode:
authorStefan Fritsch <sf@apache.org>2013-05-03 18:35:14 +0000
committerStefan Fritsch <sf@apache.org>2013-05-03 18:35:14 +0000
commitf29f5b94850abdcbadfd69fee8fa23acc52caf7b (patch)
tree1dd153515e7b773527083bb73ebf89c183b69eb5 /network_io
parentab728171e71e4fb0f481680cb9ce13d62063a7e1 (diff)
downloadapr-f29f5b94850abdcbadfd69fee8fa23acc52caf7b.tar.gz
Make sure apr_sockaddr_info_get() returns an error if
- getaddrinfo() returned only useless entries - getaddrinfo() returned EAI_SYSTEM but errno == 0 - gethostbyname() returns no error but an empty address list Submitted by: Jan Kaluža <jkaluza redhat com>, Stefan Fritsch git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1478905 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r--network_io/unix/sockaddr.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/network_io/unix/sockaddr.c b/network_io/unix/sockaddr.c
index 9e98821ee..1ccc3f571 100644
--- a/network_io/unix/sockaddr.c
+++ b/network_io/unix/sockaddr.c
@@ -393,7 +393,7 @@ static apr_status_t call_resolver(apr_sockaddr_t **sa,
return apr_get_netos_error();
#else
if (error == EAI_SYSTEM) {
- return errno;
+ return errno ? errno : APR_EGENERAL;
}
else
{
@@ -448,6 +448,15 @@ static apr_status_t call_resolver(apr_sockaddr_t **sa,
ai = ai->ai_next;
}
freeaddrinfo(ai_list);
+
+ if (prev_sa == NULL) {
+ /*
+ * getaddrinfo returned only useless entries and *sa is still empty.
+ * This should be treated as an error.
+ */
+ return APR_EGENERAL;
+ }
+
return APR_SUCCESS;
}
@@ -581,6 +590,11 @@ static apr_status_t find_addresses(apr_sockaddr_t **sa,
++curaddr;
}
+ if (prev_sa == NULL) {
+ /* this should not happen but no result should be treated as error */
+ return APR_EGENERAL;
+ }
+
return APR_SUCCESS;
}