From: Nick Alcock Date: Mon, 21 May 2012 14:25:07 +0000 (+0200) Subject: Fix UDP and TCP port byte order in saved options. X-Git-Tag: upstream/1.10.0~98 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9bd38a4a6e3cc0ffc83585eb41650e300323fb04;p=platform%2Fupstream%2Fc-ares.git Fix UDP and TCP port byte order in saved options. The UDP and TCP port are stored in network byte order in the ares_channeldata, but are passed in to ares_init_options() in host byte order. Thus we must return them from ares_save_options() in host byte order too, or a duplicated channel will convert them again, leading to a nonfunctional channel and a mysterious connection refused error from ares_gethostbyname(). This breaks ares_dup(), thus the curl easy API when c-ares is used by curl, and thus all the curl easy API's users. --- diff --git a/ares_init.c b/ares_init.c index 823bef5..ccdc07a 100644 --- a/ares_init.c +++ b/ares_init.c @@ -355,8 +355,8 @@ int ares_save_options(ares_channel channel, struct ares_options *options, options->timeout = channel->timeout; options->tries = channel->tries; options->ndots = channel->ndots; - options->udp_port = (unsigned short)channel->udp_port; - options->tcp_port = (unsigned short)channel->tcp_port; + options->udp_port = (unsigned short)ntohs(channel->udp_port); + options->tcp_port = (unsigned short)ntohs(channel->tcp_port); options->sock_state_cb = channel->sock_state_cb; options->sock_state_cb_data = channel->sock_state_cb_data;