diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c index 04d1e8690..f3fa663d4 100644 --- a/mrbgems/mruby-socket/src/socket.c +++ b/mrbgems/mruby-socket/src/socket.c @@ -872,6 +872,12 @@ mrb_ipsocket_ntop(mrb_state *mrb, mrb_value klass) * * IPSocket.pton(Socket::AF_INET, "127.0.0.1") #=> "\x7f\x00\x00\x01" */ +static mrb_noreturn void +invalid_address_error(mrb_state *mrb) +{ + mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid address"); +} + static mrb_value mrb_ipsocket_pton(mrb_state *mrb, mrb_value klass) { @@ -880,29 +886,30 @@ mrb_ipsocket_pton(mrb_state *mrb, mrb_value klass) char buf[50]; mrb_get_args(mrb, "is", &af, &bp, &n); - if ((size_t)n > sizeof(buf) - 1) goto invalid; + if ((size_t)n > sizeof(buf) - 1) { + invalid_address_error(mrb); + } memcpy(buf, bp, n); buf[n] = '\0'; if (af == AF_INET) { struct in_addr in; - if (mrb_hal_socket_inet_pton(AF_INET, buf, (void*)&in.s_addr) != 1) - goto invalid; + if (mrb_hal_socket_inet_pton(AF_INET, buf, (void*)&in.s_addr) != 1) { + invalid_address_error(mrb); + } return mrb_str_new(mrb, (char*)&in.s_addr, 4); } else if (af == AF_INET6) { struct in6_addr in6; - if (mrb_hal_socket_inet_pton(AF_INET6, buf, (void*)&in6.s6_addr) != 1) - goto invalid; + if (mrb_hal_socket_inet_pton(AF_INET6, buf, (void*)&in6.s6_addr) != 1) { + invalid_address_error(mrb); + } return mrb_str_new(mrb, (char*)&in6.s6_addr, 16); } else { mrb_raise(mrb, E_ARGUMENT_ERROR, "unsupported address family"); } - -invalid: - mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid address"); - return mrb_nil_value(); /* dummy */ + return mrb_nil_value(); /* not reached */ } /*