Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
4bcc27c
merge revision(s) r45891,r45893,r45895:
nagachika May 10, 2014
472b47f
merge revision(s) r45901:
nagachika May 10, 2014
f565774
merge revision(s) r45360,r45361: [Backport #9651]
nagachika May 12, 2014
a40b9a3
merge revision(s) r45758,r45759: [Backport #9759]
nagachika May 12, 2014
1400374
merge revision(s) r45637: [Backport #9726]
nagachika May 12, 2014
eff0f73
merge revision(s) r45367,r45387,r45388,r45389: [Backport #9475]
nagachika May 15, 2014
75edd5f
merge revision(s) r45374: [Backport #8405]
nagachika May 15, 2014
d41b88b
merge revision(s) r45405,r45408: [Backport #9669] [Backport #9740]
nagachika May 18, 2014
e973ab4
merge revision(s) r45553,r45554,r45557,r45558,r45561,r45566,r45567: […
nagachika May 18, 2014
a800c86
merge revision(s) r46010:
nagachika May 19, 2014
cbca421
merge revision(s) r45045,r45046,r45530: [Backport #9697]
nagachika May 22, 2014
f6a385b
merge revision(s) r45520: [Backport #9706]
nagachika May 27, 2014
d5705f5
merge revision(s) r45529: [Backport #8182]
nagachika May 27, 2014
adbf635
merge revision(s) r45534: [Backport #9709]
nagachika May 27, 2014
0d5f521
merge revision(s) r45562: [Backport #9727]
nagachika May 27, 2014
2a1acd5
merge revision(s) r45179,r45564,r45565,r45584,r45585: [Backport #9721]
nagachika May 27, 2014
148bce7
merge revision(s) r45604: [Backport #9748]
nagachika May 27, 2014
f5a5623
merge revision(s) r45646: [Backport #9765]
nagachika May 28, 2014
9dee6a1
merge revision(s) r45701: [Backport #9771]
nagachika May 28, 2014
88f5032
merge revision(s) r45716: [Backport #9665]
nagachika May 28, 2014
5328a14
merge revision(s) r45187,r45205,r45206,r45212,r45213: [Backport #9570]
nagachika May 29, 2014
66c9e45
merge revision(s) r45178,r45180,r45183: [Backport #9568]
nagachika May 29, 2014
9e08fce
merge revision(s) r45350: [Backport #9645]
nagachika Jun 1, 2014
ab6ca12
merge revision(s) r45320,r45321: [Backport #9622]
nagachika Jun 1, 2014
122d84a
merge revision(s) r45365: [Backport #9656]
nagachika Jun 1, 2014
2b1813e
merge revision(s) r45364,r45395,r45396,r45403,r45406: [Backport #9652]
nagachika Jun 1, 2014
c1129dc
merge revision(s) r45471: [Backport #9688]
nagachika Jun 1, 2014
8416142
merge revision(s) r45302: [Backport #9616]
nagachika Jun 2, 2014
e6d91ff
merge revision(s) r45517,r45544,r45924:
nagachika Jun 6, 2014
e541233
* test/ruby/test_string (test_LSHIFT_neary_long_max): extend timeout.
nagachika Jun 10, 2014
c8139d2
merge revision(s) r45207,r45208,r45209,r45210: [Backport #9575]
nagachika Jun 10, 2014
c4830ed
merge revision(s) r45378: [Backport #9658] [Backport #9866]
nagachika Jun 10, 2014
11f564b
merge revision(s) r45308,r45316: [Backport #9621]
nagachika Jun 10, 2014
d10b8c6
merge revision(s) r45224,r45228: [Backport #9838]
nagachika Jun 11, 2014
6f38268
merge revision(s) r45287,r45288,r45289,r45290: [Backport #9600]
nagachika Jun 16, 2014
22291da
merge revision(s) r45521,r45523,r45551: [Backport #9699]
nagachika Jun 16, 2014
ebdccc0
merge revision(s) r45724: [Backport #9776]
nagachika Jun 16, 2014
8a8177b
merge revision(s) r45954: [Backport #8358]
nagachika Jun 19, 2014
f231528
merge revision(s) r44712,r44715,r44716,r44722,r44725,r44726,r44753: […
nagachika Jun 19, 2014
0f0a6ca
merge revision(s) r46060: [Backport #9627]
nagachika Jun 22, 2014
cb5f0a4
merge revision(s) r45899: [Backport #9751]
nagachika Jun 22, 2014
2161ddb
merge revision(s) r45874: [Backport #9813]
nagachika Jun 22, 2014
7a5fbf3
merge revision(s) r46194: [Backport #9835]
nagachika Jun 23, 2014
b2194eb
* 2014-06-24
matzbot Jun 23, 2014
80d7b9f
merge revision(s) r45947,r45951: [Backport #9739] [Backport #9844]
nagachika Jun 23, 2014
c0a18e2
merge revision(s) r46182: [Backport #9872]
nagachika Jun 23, 2014
31f22ea
merge revision(s) r46313: [Backport #9896]
nagachika Jun 23, 2014
de8bfb3
merge revision(s) r45540: [Backport #9911]
nagachika Jun 23, 2014
bf18eb2
merge revision(s) r45845,r45846,r45847: [Backport #9486]
nagachika Jun 28, 2014
f57b6ff
merge revision(s) r46243,r46244: [Backport #9882] [Backport #9883]
nagachika Jun 28, 2014
9f7bc30
merge revision(s) r46598: [Backport #9991]
nagachika Jun 28, 2014
92c8359
merge revision(s) r44535,r44536: [Backport #9321]
nagachika Jun 29, 2014
3214160
merge revision(s) r46485: [Backport #9897]
nagachika Jun 29, 2014
bc1e48b
merge revision(s) r44505: [Backport #9994]
nagachika Jun 29, 2014
03fe035
merge revision(s) r46098: [Backport #9861]
nagachika Jun 29, 2014
3ef7c81
merge revision(s) r45793: [Backport #9608]
nagachika Jun 29, 2014
c1a34b1
merge revision(s) r45863,r45871: [Backport #9750]
nagachika Jun 29, 2014
23b95d3
merge revision(s) r45979: [Backport #9847]
nagachika Jun 29, 2014
080fef3
merge revision(s) r46075: [Backport #9856]
nagachika Jun 29, 2014
b751c78
merge revision(s) r46233: [Backport #9878]
nagachika Jun 29, 2014
ef4e4ce
merge revision(s) r46331: [Backport #9885]
nagachika Jun 29, 2014
1b28556
merge revision(s) r46457,r46458: [Backport #9949]
nagachika Jun 29, 2014
40e342c
merge revision(s) r46342: [Backport #9954]
nagachika Jun 29, 2014
483fcef
merge revision(s) r45399,r45400,r46036,r46037: [Backport #416]
nagachika Jun 30, 2014
e700ac2
merge revision(s) r46360,r46372: [Backport #8625]
nagachika Jun 30, 2014
94a893e
merge revision(s) r45858,r45859,r45860,r45861,r46638: [Backport #9811]
nagachika Jul 2, 2014
a23eb43
merge revision(s) r45495: [Backport #9662]
nagachika Jul 2, 2014
5e75994
merge revision(s) r45462,r45463,r45466: [Backport #9684]
nagachika Jul 3, 2014
4f79338
merge revision(s) r45786: [Backport #9738]
nagachika Jul 3, 2014
067784a
merge revision(s) r45896: [Backport #9773]
nagachika Jul 3, 2014
96686c0
merge revision(s) r46095: [Backport #9819]
nagachika Jul 3, 2014
bf3a2f3
merge revision(s) r46099: [Backport #9814]
nagachika Jul 3, 2014
066a450
merge revision(s) r45344: [Backport #9543]
nagachika Jul 6, 2014
d5addff
merge revision(s) r45642,r45643: [Backport #9646] [Backport #9729]
nagachika Jul 6, 2014
02e809a
merge revision(s) r46780: [Backport #9499]
nagachika Jul 11, 2014
ce99468
merge revision(s) r45423,r45424: [Backport #9674]
nagachika Jul 13, 2014
5acdbee
merge revision(s) r46778: [Backport #10019]
nagachika Jul 13, 2014
0b7bb7f
merge revision(s) r46416: [Backport #9942]
nagachika Jul 13, 2014
b373075
merge revision(s) r46417,r46418: [Backport #9939]
nagachika Jul 13, 2014
390e923
merge revision(s) r46368,r46371: [Backport #9913]
nagachika Jul 13, 2014
c7391a0
merge revision(s) r44516,r46159,r46196: [Backport #8523]
nagachika Jul 13, 2014
bdb5ef9
merge revision(s) r46344: [Backport #9902]
nagachika Jul 18, 2014
f30e047
merge revision(s) r46899,r46903,r46904:
nagachika Jul 23, 2014
e7edc10
merge revision(s) r45144: [Backport #9544]
nagachika Jul 23, 2014
755128c
merge revision(s) r45720: [Backport #9571]
nagachika Jul 23, 2014
cd5dc29
merge revision(s) r45827: [Backport #9618]
nagachika Jul 23, 2014
44c8b12
merge revision(s) r45034,r45037:
nagachika Jul 23, 2014
15d2f7a
merge revision(s) r45953,r45961: [Backport #9767]
nagachika Jul 23, 2014
75a999b
merge revision(s) r46419,r46429: [Backport #9940]
nagachika Jul 30, 2014
235af84
merge revision(s) r46463: [Backport #9957]
nagachika Jul 30, 2014
c0e3a07
merge revision(s) r46464: [Backport #9959]
nagachika Jul 30, 2014
9604c68
merge revision(s) r46471: [Backport #9964]
nagachika Jul 30, 2014
0ee5ad5
merge revision(s) r46649: [Backport #10005]
nagachika Aug 2, 2014
5816247
merge revision(s) r44577,r45097,r45330,r45331,r45354,r45356: [Backpor…
nagachika Aug 2, 2014
e436fee
merge revision(s) r44610,r44617:
nagachika Aug 3, 2014
8a504f7
merge revision(s) r46465,r46469,r46484: [Backport #9961]
nagachika Aug 3, 2014
73a3fc3
merge revision(s) r46345,r46346: [Backport #9903]
nagachika Aug 3, 2014
6508fff
merge revision(s) r46550: [Backport #9977]
nagachika Aug 3, 2014
f91bd16
merge revision(s) r46557,r46565: [Backport #9978]
nagachika Aug 3, 2014
b57a859
merge revision(s) r46570: [Backport #9983]
nagachika Aug 3, 2014
69f7b4f
merge revision(s) r46585,r46595,r46822: [Backport #9977] [Backport #9…
nagachika Aug 3, 2014
39b896c
merge revision(s) r45676,r45677: [Backport #9769]
nagachika Aug 8, 2014
9967966
merge revision(s) r46775: [Backport #10016]
nagachika Aug 11, 2014
fad3a35
merge revision(s) r46382,r46384,r46913: [Backport #9914]
nagachika Aug 11, 2014
58e57a7
merge revision(s) r46151,r46165: [Backport #9865]
nagachika Aug 11, 2014
c65eb7b
merge revision(s) r46241: [Backport #9875]
nagachika Aug 11, 2014
659fd08
merge revision(s) r46408,r46410,r46413,r46414,r46424,r46436,r46437: […
nagachika Aug 18, 2014
4ac47f3
merge revision(s) r46481: [Backport #9966]
nagachika Aug 18, 2014
be2ae51
merge r46831 partially. extracted commits are as follows.
nagachika Aug 19, 2014
1f5aeeb
merge revision(s) r45349,r45837,r45838: [Backport #9521] [Backport #9…
nagachika Aug 20, 2014
f3274f5
merge revision(s) r45542,r45543: [Backport #9717]
nagachika Aug 20, 2014
def5eab
merge revision(s) r46896,r46897,r46898: [Backport #10078]
nagachika Aug 22, 2014
50d3445
merge revision(s) r47037: [Backport #10106]
nagachika Aug 22, 2014
7a1fdd6
merge revision(s) r47090: [Backport #10114]
nagachika Aug 24, 2014
e552b9a
merge revision(s) r47098: [Backport #10117]
nagachika Aug 24, 2014
da8e7cc
merge revision(s) r45503,r45504,r45508,r45509,r47275: [Backport #9692]
nagachika Aug 25, 2014
51fa567
merge revision(s) r45512,r45513,r45515: [Backport #9698]
nagachika Aug 25, 2014
73ce2f3
merge revision(s) r45537: [Backport #9710]
nagachika Aug 25, 2014
66ea2f0
merge revision(s) r45885: [Backport #9818]
nagachika Aug 25, 2014
fad6928
merge revision(s) r46441: [Backport #9946]
nagachika Aug 30, 2014
1cb08e9
merge revision(s) r47153: [Backport #10127]
nagachika Aug 30, 2014
a223ff8
merge revision(s) r46387: [Backport #9607]
nagachika Aug 30, 2014
7706aa1
merge revision(s) r45911,r45912,r45917,r45918,r45919: [Backport #9820]
nagachika Sep 1, 2014
b35781d
merge revision(s) r46547: [Backport #9976]
nagachika Sep 1, 2014
9e95cee
merge revision(s) r47362: [Backport #9984]
nagachika Sep 3, 2014
b8db23a
merge revision(s) r46569: [Backport #9982]
nagachika Sep 3, 2014
348e55c
merge revision(s) r46876: [Backport #10039]
nagachika Sep 3, 2014
645588b
merge revision(s) r47217: [Backport #10062]
nagachika Sep 3, 2014
3598e34
merge revision(s) r45046,r45047,r45063,r45087,r45146,r45150,r45151,r4…
nagachika Sep 5, 2014
239068c
merge revision(s) r44916: [Backport #10043]
nagachika Sep 5, 2014
8d728c2
merge revision(s) r46796: [Backport #10008]
nagachika Sep 5, 2014
d64aa61
merge revision(s) r47327: [Backport #10008]
nagachika Sep 5, 2014
0f6e3df
Backport r47425
Sep 6, 2014
9dfb0f3
Bump patch level from r47426
Sep 6, 2014
2eb09f3
merge revision(s) r47190: [Backport #10139]
nagachika Sep 9, 2014
860ec67
merge revision(s) r47191: [Backport #10140]
nagachika Sep 9, 2014
8f8f174
merge revision(s) r47196: [Backport #10144]
nagachika Sep 9, 2014
3de9369
merge revision(s) r47221: [Backport #10149]
nagachika Sep 9, 2014
e315e5e
merge revision(s) r47288: [Backport #10153]
nagachika Sep 9, 2014
ed1c1f9
merge revision(s) r47248: [Backport #10161]
nagachika Sep 10, 2014
052b926
merge r46831 partially. extracted commits are as follows. [Bug #9344]
nagachika Sep 10, 2014
9755952
merge revision(s) r46501,r47372,r47460: [Backport #10191]
nagachika Sep 10, 2014
1cbde5b
merge revision(s) r46391,r46395: [Backport #9766]
nagachika Sep 14, 2014
2e098c3
merge revision(s) r47457: [Backport #8315]
nagachika Sep 14, 2014
2b8928d
merge revision(s) r44459,r44470: [Backport #8315]
nagachika Sep 15, 2014
01cee45
merge revision(s) r47590: [Backport #10241]
nagachika Sep 15, 2014
4ad1bd4
merge revision(s) r47591: [Backport #10242]
nagachika Sep 15, 2014
f5c3ada
merge revision(s) r46495,r46499: [Backport #9971]
nagachika Sep 15, 2014
9a0a3f7
* version.h (RUBY_VERSION): bump RUBY_VERSION to 2.1.3.
nagachika Sep 18, 2014
4cb2998
add tag v2_1_3
nagachika Sep 18, 2014
3d8ac37
Merge tag 'v2_1_3' into dbussink/ruby-2-1-3
dbussink Sep 20, 2014
39e9044
Use stock heap_set_increment implementation and calling behavior
dbussink Sep 20, 2014
ddbf600
Use upstream socket implementation
dbussink Sep 20, 2014
e5d63cb
Fix indenting to match upstream
dbussink Sep 20, 2014
4c75f86
Cleanup type conversions
dbussink Sep 22, 2014
da6989e
Require env_util for assert_in_out_err
dbussink Sep 22, 2014
6b25e9a
array.c: GC guard
nobu Sep 22, 2014
da7ec40
merge revision(s) r47696,r47697: [Backport #10279]
nagachika Sep 23, 2014
741436c
stringio.c: ASCII-8BIT StringIO rejects no encodings
nobu Sep 26, 2014
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
merge revision(s) r45045,r45046,r45530: [Backport ruby#9697]
	* ext/socket/ipsocket.c (ip_s_getaddress): Don't access freed memory.

	* ext/socket: Wrap struct addrinfo by struct rb_addrinfo.

	* ext/socket/socket.c (sock_s_getnameinfo): Save errno for EAI_SYSTEM.
	  Reported by Saravana kumar.  [ruby-core:61820] [Bug ruby#9697]
	  Fixed by Heesob Park.  [ruby-core:61868]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@46054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nagachika committed May 22, 2014
commit cbca421d89b8c64a6157b6dcc633c5b8c736611e
14 changes: 14 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
Fri May 23 00:04:13 2014 Tanaka Akira <[email protected]>

* ext/socket/socket.c (sock_s_getnameinfo): Save errno for EAI_SYSTEM.
Reported by Saravana kumar. [ruby-core:61820] [Bug #9697]
Fixed by Heesob Park. [ruby-core:61868]

Fri May 23 00:04:13 2014 Tanaka Akira <[email protected]>

* ext/socket: Wrap struct addrinfo by struct rb_addrinfo.

Fri May 23 00:04:13 2014 Tanaka Akira <[email protected]>

* ext/socket/ipsocket.c (ip_s_getaddress): Don't access freed memory.

Mon May 19 00:47:00 2014 Koichi Sasada <[email protected]>

* test/ruby/test_array.rb: remove useless `assert'.
Expand Down
21 changes: 11 additions & 10 deletions ext/socket/ipsocket.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ struct inetsock_arg
VALUE sock;
struct {
VALUE host, serv;
struct addrinfo *res;
struct rb_addrinfo *res;
} remote, local;
int type;
int fd;
Expand All @@ -25,11 +25,11 @@ static VALUE
inetsock_cleanup(struct inetsock_arg *arg)
{
if (arg->remote.res) {
freeaddrinfo(arg->remote.res);
rb_freeaddrinfo(arg->remote.res);
arg->remote.res = 0;
}
if (arg->local.res) {
freeaddrinfo(arg->local.res);
rb_freeaddrinfo(arg->local.res);
arg->local.res = 0;
}
if (arg->fd >= 0) {
Expand Down Expand Up @@ -57,14 +57,14 @@ init_inetsock_internal(struct inetsock_arg *arg)
}

arg->fd = fd = -1;
for (res = arg->remote.res; res; res = res->ai_next) {
for (res = arg->remote.res->ai; res; res = res->ai_next) {
#if !defined(INET6) && defined(AF_INET6)
if (res->ai_family == AF_INET6)
continue;
#endif
lres = NULL;
if (arg->local.res) {
for (lres = arg->local.res; lres; lres = lres->ai_next) {
for (lres = arg->local.res->ai; lres; lres = lres->ai_next) {
if (lres->ai_family == res->ai_family)
break;
}
Expand All @@ -73,7 +73,7 @@ init_inetsock_internal(struct inetsock_arg *arg)
continue;
/* Use a different family local address if no choice, this
* will cause EAFNOSUPPORT. */
lres = arg->local.res;
lres = arg->local.res->ai;
}
}
status = rsock_socket(res->ai_family,res->ai_socktype,res->ai_protocol);
Expand Down Expand Up @@ -304,13 +304,14 @@ static VALUE
ip_s_getaddress(VALUE obj, VALUE host)
{
union_sockaddr addr;
struct addrinfo *res = rsock_addrinfo(host, Qnil, SOCK_STREAM, 0);
struct rb_addrinfo *res = rsock_addrinfo(host, Qnil, SOCK_STREAM, 0);
socklen_t len = res->ai->ai_addrlen;

/* just take the first one */
memcpy(&addr, res->ai_addr, res->ai_addrlen);
freeaddrinfo(res);
memcpy(&addr, res->ai->ai_addr, len);
rb_freeaddrinfo(res);

return rsock_make_ipaddr(&addr.addr, res->ai_addrlen);
return rsock_make_ipaddr(&addr.addr, len);
}

void
Expand Down
87 changes: 52 additions & 35 deletions ext/socket/raddrinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,21 +174,35 @@ nogvl_getaddrinfo(void *arg)
int
rb_getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
struct addrinfo **res)
struct rb_addrinfo **res)
{
struct addrinfo *ai;
int ret;

#ifdef GETADDRINFO_EMU
return getaddrinfo(node, service, hints, res);
ret = getaddrinfo(node, service, hints, &ai);
#else
struct getaddrinfo_arg arg;
int ret;
MEMZERO(&arg, sizeof arg, 1);
arg.node = node;
arg.service = service;
arg.hints = hints;
arg.res = res;
arg.res = &ai;
ret = (int)(VALUE)rb_thread_call_without_gvl(nogvl_getaddrinfo, &arg, RUBY_UBF_IO, 0);
return ret;
#endif

if (ret == 0) {
*res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo));
(*res)->ai = ai;
}
return ret;
}

void
rb_freeaddrinfo(struct rb_addrinfo *ai)
{
freeaddrinfo(ai->ai);
xfree(ai);
}

#ifndef GETADDRINFO_EMU
Expand Down Expand Up @@ -345,10 +359,10 @@ port_str(VALUE port, char *pbuf, size_t pbuflen, int *flags_ptr)
}
}

struct addrinfo*
struct rb_addrinfo*
rsock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_hack)
{
struct addrinfo* res = NULL;
struct rb_addrinfo* res = NULL;
char *hostp, *portp;
int error;
char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
Expand All @@ -373,7 +387,7 @@ rsock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_h
return res;
}

struct addrinfo*
struct rb_addrinfo*
rsock_addrinfo(VALUE host, VALUE port, int socktype, int flags)
{
struct addrinfo hints;
Expand Down Expand Up @@ -474,15 +488,15 @@ rsock_unix_sockaddr_len(VALUE path)

struct hostent_arg {
VALUE host;
struct addrinfo* addr;
struct rb_addrinfo* addr;
VALUE (*ipaddr)(struct sockaddr*, socklen_t);
};

static VALUE
make_hostent_internal(struct hostent_arg *arg)
{
VALUE host = arg->host;
struct addrinfo* addr = arg->addr;
struct addrinfo* addr = arg->addr->ai;
VALUE (*ipaddr)(struct sockaddr*, socklen_t) = arg->ipaddr;

struct addrinfo *ai;
Expand Down Expand Up @@ -522,14 +536,15 @@ make_hostent_internal(struct hostent_arg *arg)
}

VALUE
rsock_freeaddrinfo(struct addrinfo *addr)
rsock_freeaddrinfo(VALUE arg)
{
freeaddrinfo(addr);
struct rb_addrinfo *addr = (struct rb_addrinfo *)arg;
rb_freeaddrinfo(addr);
return Qnil;
}

VALUE
rsock_make_hostent(VALUE host, struct addrinfo *addr, VALUE (*ipaddr)(struct sockaddr *, socklen_t))
rsock_make_hostent(VALUE host, struct rb_addrinfo *addr, VALUE (*ipaddr)(struct sockaddr *, socklen_t))
{
struct hostent_arg arg;

Expand Down Expand Up @@ -639,12 +654,13 @@ rsock_addrinfo_new(struct sockaddr *addr, socklen_t len,
return a;
}

static struct addrinfo *
static struct rb_addrinfo *
call_getaddrinfo(VALUE node, VALUE service,
VALUE family, VALUE socktype, VALUE protocol, VALUE flags,
int socktype_hack)
{
struct addrinfo hints, *res;
struct addrinfo hints;
struct rb_addrinfo *res;

MEMZERO(&hints, struct addrinfo, 1);
hints.ai_family = NIL_P(family) ? PF_UNSPEC : rsock_family_arg(family);
Expand Down Expand Up @@ -672,21 +688,21 @@ init_addrinfo_getaddrinfo(rb_addrinfo_t *rai, VALUE node, VALUE service,
VALUE family, VALUE socktype, VALUE protocol, VALUE flags,
VALUE inspectnode, VALUE inspectservice)
{
struct addrinfo *res = call_getaddrinfo(node, service, family, socktype, protocol, flags, 1);
struct rb_addrinfo *res = call_getaddrinfo(node, service, family, socktype, protocol, flags, 1);
VALUE canonname;
VALUE inspectname = rb_str_equal(node, inspectnode) ? Qnil : make_inspectname(inspectnode, inspectservice, res);
VALUE inspectname = rb_str_equal(node, inspectnode) ? Qnil : make_inspectname(inspectnode, inspectservice, res->ai);

canonname = Qnil;
if (res->ai_canonname) {
canonname = rb_tainted_str_new_cstr(res->ai_canonname);
if (res->ai->ai_canonname) {
canonname = rb_tainted_str_new_cstr(res->ai->ai_canonname);
OBJ_FREEZE(canonname);
}

init_addrinfo(rai, res->ai_addr, res->ai_addrlen,
init_addrinfo(rai, res->ai->ai_addr, res->ai->ai_addrlen,
NUM2INT(family), NUM2INT(socktype), NUM2INT(protocol),
canonname, inspectname);

freeaddrinfo(res);
rb_freeaddrinfo(res);
}

static VALUE
Expand Down Expand Up @@ -742,21 +758,22 @@ addrinfo_firstonly_new(VALUE node, VALUE service, VALUE family, VALUE socktype,
VALUE canonname;
VALUE inspectname;

struct addrinfo *res = call_getaddrinfo(node, service, family, socktype, protocol, flags, 0);
struct rb_addrinfo *res = call_getaddrinfo(node, service, family, socktype, protocol, flags, 0);

inspectname = make_inspectname(node, service, res);
inspectname = make_inspectname(node, service, res->ai);

canonname = Qnil;
if (res->ai_canonname) {
canonname = rb_tainted_str_new_cstr(res->ai_canonname);
if (res->ai->ai_canonname) {
canonname = rb_tainted_str_new_cstr(res->ai->ai_canonname);
OBJ_FREEZE(canonname);
}

ret = rsock_addrinfo_new(res->ai_addr, res->ai_addrlen,
res->ai_family, res->ai_socktype, res->ai_protocol,
ret = rsock_addrinfo_new(res->ai->ai_addr, res->ai->ai_addrlen,
res->ai->ai_family, res->ai->ai_socktype,
res->ai->ai_protocol,
canonname, inspectname);

freeaddrinfo(res);
rb_freeaddrinfo(res);
return ret;
}

Expand All @@ -767,12 +784,12 @@ addrinfo_list_new(VALUE node, VALUE service, VALUE family, VALUE socktype, VALUE
struct addrinfo *r;
VALUE inspectname;

struct addrinfo *res = call_getaddrinfo(node, service, family, socktype, protocol, flags, 0);
struct rb_addrinfo *res = call_getaddrinfo(node, service, family, socktype, protocol, flags, 0);

inspectname = make_inspectname(node, service, res);
inspectname = make_inspectname(node, service, res->ai);

ret = rb_ary_new();
for (r = res; r; r = r->ai_next) {
for (r = res->ai; r; r = r->ai_next) {
VALUE addr;
VALUE canonname = Qnil;

Expand All @@ -788,7 +805,7 @@ addrinfo_list_new(VALUE node, VALUE service, VALUE family, VALUE socktype, VALUE
rb_ary_push(ret, addr);
}

freeaddrinfo(res);
rb_freeaddrinfo(res);
return ret;
}

Expand Down Expand Up @@ -1513,7 +1530,7 @@ addrinfo_mload(VALUE self, VALUE ary)
default:
{
VALUE pair = rb_convert_type(v, T_ARRAY, "Array", "to_ary");
struct addrinfo *res;
struct rb_addrinfo *res;
int flags = AI_NUMERICHOST;
#ifdef AI_NUMERICSERV
flags |= AI_NUMERICSERV;
Expand All @@ -1522,8 +1539,8 @@ addrinfo_mload(VALUE self, VALUE ary)
INT2NUM(pfamily), INT2NUM(socktype), INT2NUM(protocol),
INT2NUM(flags), 1);

len = res->ai_addrlen;
memcpy(&ss, res->ai_addr, res->ai_addrlen);
len = res->ai->ai_addrlen;
memcpy(&ss, res->ai->ai_addr, res->ai->ai_addrlen);
break;
}
}
Expand Down
13 changes: 9 additions & 4 deletions ext/socket/rubysocket.h
Original file line number Diff line number Diff line change
Expand Up @@ -278,10 +278,15 @@ int rsock_shutdown_how_arg(VALUE how);

int rsock_getfamily(int sockfd);

int rb_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);
struct rb_addrinfo {
struct addrinfo *ai;
};
int rb_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct rb_addrinfo **res);
void rb_freeaddrinfo(struct rb_addrinfo *ai);
VALUE rsock_freeaddrinfo(VALUE arg);
int rb_getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);
struct addrinfo *rsock_addrinfo(VALUE host, VALUE port, int socktype, int flags);
struct addrinfo *rsock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_hack);
struct rb_addrinfo *rsock_addrinfo(VALUE host, VALUE port, int socktype, int flags);
struct rb_addrinfo *rsock_getaddrinfo(VALUE host, VALUE port, struct addrinfo *hints, int socktype_hack);
VALUE rsock_fd_socket_addrinfo(int fd, struct sockaddr *addr, socklen_t len);
VALUE rsock_io_socket_addrinfo(VALUE io, struct sockaddr *addr, socklen_t len);

Expand All @@ -290,7 +295,7 @@ VALUE rsock_addrinfo_inspect_sockaddr(VALUE rai);

VALUE rsock_make_ipaddr(struct sockaddr *addr, socklen_t addrlen);
VALUE rsock_ipaddr(struct sockaddr *sockaddr, socklen_t sockaddrlen, int norevlookup);
VALUE rsock_make_hostent(VALUE host, struct addrinfo *addr, VALUE (*ipaddr)(struct sockaddr *, socklen_t));
VALUE rsock_make_hostent(VALUE host, struct rb_addrinfo *addr, VALUE (*ipaddr)(struct sockaddr *, socklen_t));
VALUE rsock_inspect_sockaddr(struct sockaddr *addr, socklen_t socklen, VALUE ret);
socklen_t rsock_sockaddr_len(struct sockaddr *addr);
VALUE rsock_sockaddr_obj(struct sockaddr *addr, socklen_t len);
Expand Down
Loading