diff options
author | sf <sf@13f79535-47bb-0310-9956-ffa450edef68> | 2013-05-03 18:39:44 +0000 |
---|---|---|
committer | sf <sf@13f79535-47bb-0310-9956-ffa450edef68> | 2013-05-03 18:39:44 +0000 |
commit | daabd33ddfe2ac3a8b3d4d15ecf3dc1cfe665d9b (patch) | |
tree | 0e331e7678bc4f343963cdeae855b5217a64cdfc | |
parent | 7ad4e1535d6a685ae69a6c6680f915b5f2950291 (diff) | |
download | libapr-daabd33ddfe2ac3a8b3d4d15ecf3dc1cfe665d9b.tar.gz |
Merge r1478905, add CHANGES entry:
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: http://svn.apache.org/repos/asf/apr/apr/branches/1.4.x@1478911 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | CHANGES | 3 | ||||
-rw-r--r-- | network_io/unix/sockaddr.c | 16 |
2 files changed, 18 insertions, 1 deletions
@@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes for APR 1.4.7 + *) Fix apr_sockaddr_info_get() not returning an error in some cases. + [Jan Kaluža <jkaluza redhat com>] + *) Fix amd64 assembler version of apr_atomic_xchgptr(). PR 51851. [Mattias Engdegård <mattiase acm org>] diff --git a/network_io/unix/sockaddr.c b/network_io/unix/sockaddr.c index a5cb8221c..9253a2746 100644 --- a/network_io/unix/sockaddr.c +++ b/network_io/unix/sockaddr.c @@ -385,7 +385,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 { @@ -440,6 +440,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; } @@ -573,6 +582,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; } |