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) r45046,r45047,r45063,r45087,r45146,r45150,r45151,r4…
…5152: [Backport ruby#9525]

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

	* ext/socket: Bypass getaddrinfo() if node and serv are numeric.
	  Reporeted by Naotoshi Seo.  [ruby-core:60801] [Bug ruby#9525]

	* ext/socket/extconf.rb: Detect struct sockaddr_in6.sin6_len.

	* ext/socket/sockport.h (SET_SIN6_LEN): New macro.
	  (INIT_SOCKADDR_IN6): Ditto.

	* ext/socket/rubysocket.h (struct rb_addrinfo): Add
	  allocated_by_malloc field.

	* ext/socket/raddrinfo.c (numeric_getaddrinfo): New function.
	  (rb_getaddrinfo): Call numeric_getaddrinfo at first.
	  (rb_freeaddrinfo): Free struct addrinfo properly when it is
	  allocated by numeric_getaddrinfo.

	* ext/socket/raddrinfo.c (numeric_getaddrinfo): Use xcalloc.
	  Suggested by Eric Wong.
	  https://bugs.ruby-lang.org/issues/9525#note-14

	* ext/socket/raddrinfo.c (rb_getaddrinfo): second argument of
	  MEMZERO is type.  Coverity Scan found this bug.

	* include/ruby/win32.h, win32/win32.c (rb_w32_inet_pton): add a
	  wrapper function for inet_pton minimum supported client is
	  Vista, as well as inet_ntop.

	* ext/socket/option.c (inet_pton): use rb_w32_inet_pton, instead of
	  inet_ntop directly, which is unavailable on older version Windows.

	* ext/socket/raddrinfo.c (inet_pton): use rb_w32_inet_pton, instead of
	  inet_pton directly, which is unavailable on older version Windows.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@47415 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nagachika committed Sep 5, 2014
commit 3598e34966fd72ae89f6fac951ebf27847159cdb
39 changes: 39 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,42 @@
Sat Sep 6 00:05:02 2014 Nobuyoshi Nakada <[email protected]>

* include/ruby/win32.h, win32/win32.c (rb_w32_inet_pton): add a
wrapper function for inet_pton minimum supported client is
Vista, as well as inet_ntop.

Sat Sep 6 00:05:02 2014 Kazuhiro NISHIYAMA <[email protected]>

* ext/socket/raddrinfo.c (rb_getaddrinfo): second argument of
MEMZERO is type. Coverity Scan found this bug.

Sat Sep 6 00:05:02 2014 Tanaka Akira <[email protected]>

* ext/socket/raddrinfo.c (numeric_getaddrinfo): Use xcalloc.
Suggested by Eric Wong.
https://bugs.ruby-lang.org/issues/9525#note-14

Sat Sep 6 00:05:02 2014 Tanaka Akira <[email protected]>

* ext/socket: Bypass getaddrinfo() if node and serv are numeric.
Reporeted by Naotoshi Seo. [ruby-core:60801] [Bug #9525]

* ext/socket/extconf.rb: Detect struct sockaddr_in6.sin6_len.

* ext/socket/sockport.h (SET_SIN6_LEN): New macro.
(INIT_SOCKADDR_IN6): Ditto.

* ext/socket/rubysocket.h (struct rb_addrinfo): Add
allocated_by_malloc field.

* ext/socket/raddrinfo.c (numeric_getaddrinfo): New function.
(rb_getaddrinfo): Call numeric_getaddrinfo at first.
(rb_freeaddrinfo): Free struct addrinfo properly when it is
allocated by numeric_getaddrinfo.

Sat Sep 6 00:05:02 2014 Tanaka Akira <[email protected]>

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

Thu Sep 4 00:31:23 2014 Nobuyoshi Nakada <[email protected]>

* ext/thread/thread.c (get_array): check instance variables are
Expand Down
1 change: 1 addition & 0 deletions ext/socket/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ def test_recvmsg_with_msg_peek_creates_fds(headers)

have_struct_member("struct sockaddr", "sa_len", headers) # 4.4BSD
have_struct_member("struct sockaddr_in", "sin_len", headers) # 4.4BSD
have_struct_member("struct sockaddr_in6", "sin6_len", headers) # 4.4BSD

if have_type("struct sockaddr_un", headers) # POSIX
have_struct_member("struct sockaddr_un", "sun_len", headers) # 4.4BSD
Expand Down
120 changes: 111 additions & 9 deletions ext/socket/raddrinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,28 +171,119 @@ nogvl_getaddrinfo(void *arg)
}
#endif

static int
numeric_getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
struct addrinfo **res)
{
#ifdef HAVE_INET_PTON
# if defined __MINGW64__
# define inet_pton(f,s,d) rb_w32_inet_pton(f,s,d)
# endif

if (node && (!service || strspn(service, "0123456789") == strlen(service))) {
static const struct {
int socktype;
int protocol;
} list[] = {
{ SOCK_STREAM, IPPROTO_TCP },
{ SOCK_DGRAM, IPPROTO_UDP },
{ SOCK_RAW, 0 }
};
struct addrinfo *ai = NULL;
int port = service ? (unsigned short)atoi(service): 0;
int hint_family = hints ? hints->ai_family : PF_UNSPEC;
int hint_socktype = hints ? hints->ai_socktype : 0;
int hint_protocol = hints ? hints->ai_protocol : 0;
char ipv4addr[4];
#ifdef AF_INET6
char ipv6addr[16];
if ((hint_family == PF_UNSPEC || hint_family == PF_INET6) &&
strspn(node, "0123456789abcdefABCDEF.:") == strlen(node) &&
inet_pton(AF_INET6, node, ipv6addr)) {
int i;
for (i = numberof(list)-1; 0 <= i; i--) {
if ((hint_socktype == 0 || hint_socktype == list[i].socktype) &&
(hint_protocol == 0 || list[i].protocol == 0 || hint_protocol == list[i].protocol)) {
struct addrinfo *ai0 = xcalloc(1, sizeof(struct addrinfo));
struct sockaddr_in6 *sa = xmalloc(sizeof(struct sockaddr_in6));
INIT_SOCKADDR_IN6(sa, sizeof(struct sockaddr_in6));
memcpy(&sa->sin6_addr, ipv6addr, sizeof(ipv6addr));
sa->sin6_port = htons(port);
ai0->ai_family = PF_INET6;
ai0->ai_socktype = list[i].socktype;
ai0->ai_protocol = hint_protocol ? hint_protocol : list[i].protocol;
ai0->ai_addrlen = sizeof(struct sockaddr_in6);
ai0->ai_addr = (struct sockaddr *)sa;
ai0->ai_canonname = NULL;
ai0->ai_next = ai;
ai = ai0;
}
}
}
else
#endif
if ((hint_family == PF_UNSPEC || hint_family == PF_INET) &&
strspn(node, "0123456789.") == strlen(node) &&
inet_pton(AF_INET, node, ipv4addr)) {
int i;
for (i = numberof(list)-1; 0 <= i; i--) {
if ((hint_socktype == 0 || hint_socktype == list[i].socktype) &&
(hint_protocol == 0 || list[i].protocol == 0 || hint_protocol == list[i].protocol)) {
struct addrinfo *ai0 = xcalloc(1, sizeof(struct addrinfo));
struct sockaddr_in *sa = xmalloc(sizeof(struct sockaddr_in));
INIT_SOCKADDR_IN(sa, sizeof(struct sockaddr_in));
memcpy(&sa->sin_addr, ipv4addr, sizeof(ipv4addr));
sa->sin_port = htons(port);
ai0->ai_family = PF_INET;
ai0->ai_socktype = list[i].socktype;
ai0->ai_protocol = hint_protocol ? hint_protocol : list[i].protocol;
ai0->ai_addrlen = sizeof(struct sockaddr_in);
ai0->ai_addr = (struct sockaddr *)sa;
ai0->ai_canonname = NULL;
ai0->ai_next = ai;
ai = ai0;
}
}
}
if (ai) {
*res = ai;
return 0;
}
}
#endif
return EAI_FAIL;
}

int
rb_getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
struct rb_addrinfo **res)
{
struct addrinfo *ai;
int ret;
int allocated_by_malloc = 0;

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

if (ret == 0) {
*res = (struct rb_addrinfo *)xmalloc(sizeof(struct rb_addrinfo));
(*res)->allocated_by_malloc = allocated_by_malloc;
(*res)->ai = ai;
}
return ret;
Expand All @@ -201,7 +292,18 @@ rb_getaddrinfo(const char *node, const char *service,
void
rb_freeaddrinfo(struct rb_addrinfo *ai)
{
freeaddrinfo(ai->ai);
if (!ai->allocated_by_malloc)
freeaddrinfo(ai->ai);
else {
struct addrinfo *ai1, *ai2;
ai1 = ai->ai;
while (ai1) {
ai2 = ai1->ai_next;
xfree(ai1->ai_addr);
xfree(ai1);
ai1 = ai2;
}
}
xfree(ai);
}

Expand Down
1 change: 1 addition & 0 deletions ext/socket/rubysocket.h
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,7 @@ int rsock_getfamily(int sockfd);

struct rb_addrinfo {
struct addrinfo *ai;
int allocated_by_malloc;
};
int rb_getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct rb_addrinfo **res);
void rb_freeaddrinfo(struct rb_addrinfo *ai);
Expand Down
15 changes: 15 additions & 0 deletions ext/socket/sockport.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@
# define SET_SIN_LEN(sa, len) SET_SA_LEN((struct sockaddr *)(sa), (len))
#endif

#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
# define SET_SIN6_LEN(sa, len) (void)((sa)->sin6_len = (len))
#else
# define SET_SIN6_LEN(sa, len) SET_SA_LEN((struct sockaddr *)(sa), (len))
#endif

#define INIT_SOCKADDR(addr, family, len) \
do { \
struct sockaddr *init_sockaddr_ptr = (addr); \
Expand All @@ -47,6 +53,15 @@
SET_SIN_LEN(init_sockaddr_ptr, init_sockaddr_len); \
} while (0)

#define INIT_SOCKADDR_IN6(addr, len) \
do { \
struct sockaddr_in6 *init_sockaddr_ptr = (addr); \
socklen_t init_sockaddr_len = (len); \
memset(init_sockaddr_ptr, 0, init_sockaddr_len); \
init_sockaddr_ptr->sin6_family = AF_INET6; \
SET_SIN6_LEN(init_sockaddr_ptr, init_sockaddr_len); \
} while (0)


/* for strict-aliasing rule */
#ifdef HAVE_TYPE_STRUCT_SOCKADDR_UN
Expand Down
4 changes: 4 additions & 0 deletions include/ruby/win32.h
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@ extern char **rb_w32_get_environ(void);
extern void rb_w32_free_environ(char **);
extern int rb_w32_map_errno(DWORD);
extern const char *WSAAPI rb_w32_inet_ntop(int,const void *,char *,size_t);
extern int WSAAPI rb_w32_inet_pton(int,const char *,void *);
extern DWORD rb_w32_osver(void);

extern int chown(const char *, int, int);
Expand Down Expand Up @@ -652,6 +653,9 @@ extern char *rb_w32_strerror(int);
#undef inet_ntop
#define inet_ntop(f,a,n,l) rb_w32_inet_ntop(f,a,n,l)

#undef inet_pton
#define inet_pton(f,s,d) rb_w32_inet_pton(f,s,d)

#undef accept
#define accept(s, a, l) rb_w32_accept(s, a, l)

Expand Down
6 changes: 3 additions & 3 deletions version.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#define RUBY_VERSION "2.1.2"
#define RUBY_RELEASE_DATE "2014-09-04"
#define RUBY_PATCHLEVEL 222
#define RUBY_RELEASE_DATE "2014-09-06"
#define RUBY_PATCHLEVEL 223

#define RUBY_RELEASE_YEAR 2014
#define RUBY_RELEASE_MONTH 9
#define RUBY_RELEASE_DAY 4
#define RUBY_RELEASE_DAY 6

#include "ruby/version.h"

Expand Down
13 changes: 13 additions & 0 deletions win32/win32.c
Original file line number Diff line number Diff line change
Expand Up @@ -6962,6 +6962,19 @@ rb_w32_inet_ntop(int af, const void *addr, char *numaddr, size_t numaddr_len)
return numaddr;
}

/* License: Ruby's */
int WSAAPI
rb_w32_inet_pton(int af, const char *src, void *dst)
{
typedef int (WSAAPI inet_pton_t)(int, const char*, void *);
inet_pton_t *pInetPton;
pInetPton = (inet_pton_t *)get_proc_address("ws2_32", "inet_pton", NULL);
if (pInetPton) {
return pInetPton(af, src, dst);
}
return 0;
}

/* License: Ruby's */
char
rb_w32_fd_is_text(int fd)
Expand Down