summaryrefslogtreecommitdiff
path: root/ext/socket/socket.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-04-10 08:45:26 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-04-10 08:45:26 +0000
commit19c42c0740145dec1be93c332647f4310ea19918 (patch)
tree88516eac5daf33e2e935c3d38415e13d542ac131 /ext/socket/socket.c
parentff0abdc55e57f42f75204429c9eca471df48d835 (diff)
* variable.c (rb_obj_remove_instance_variable): raise NameError if
specified instance variable is not defined. * variable.c (generic_ivar_remove): modified to check ivar existence. * file.c (rb_file_s_extname): new method based on the proposal (and patch) from Mike Hall. [new] * eval.c (error_handle): default to 1 unless status is set. * eval.c (ruby_options): guard error_handle() with PROT_NONE. * eval.c (ruby_stop): ditto. * math.c (math_acosh): added. [new] * math.c (math_asinh): ditto. * math.c (math_atanh): ditto. * struct.c (rb_struct_each_pair): method added. [new] * class.c (rb_singleton_class): wrong condition; was creating unnecessary singleton class. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket/socket.c')
-rw-r--r--ext/socket/socket.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 9a64399637..e2f1f0ce12 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -770,7 +770,7 @@ ruby_connect(fd, sockaddr, len, socks)
case EAGAIN:
#ifdef EINPROGRESS
case EINPROGRESS:
-#if defined __CYGWIN__
+#ifdef __CYGWIN__
case EALREADY:
wait_in_progress = 10;
#endif
@@ -2224,6 +2224,10 @@ sock_s_unpack_sockaddr_in(self, addr)
struct sockaddr_in * sockaddr;
sockaddr = (struct sockaddr_in*)StringValuePtr(addr);
+ if (RSTRING(addr)->len != sizeof(struct sockaddr_in)) {
+ rb_raise(rb_eTypeError, "sockaddr_in size differs - %d required; %d given",
+ RSTRING(addr)->len, sizeof(struct sockaddr_in));
+ }
return rb_assoc_new(INT2NUM(ntohs(sockaddr->sin_port)), mkipaddr(sockaddr));
}
@@ -2251,6 +2255,10 @@ sock_s_unpack_sockaddr_un(self, addr)
struct sockaddr_un * sockaddr;
sockaddr = (struct sockaddr_un*)StringValuePtr(addr);
+ if (RSTRING(addr)->len != sizeof(struct sockaddr_un)) {
+ rb_raise(rb_eTypeError, "sockaddr_un size differs - %d required; %d given",
+ RSTRING(addr)->len, sizeof(struct sockaddr_un));
+ }
/* xxx: should I check against sun_path size? */
return rb_tainted_str_new2(sockaddr->sun_path);
}