diff options
| author | Tomoyuki Sahara <[email protected]> | 2018-06-14 13:25:57 +0900 |
|---|---|---|
| committer | Tomoyuki Sahara <[email protected]> | 2018-06-14 13:25:57 +0900 |
| commit | 3618556a95957f82f6fd853af239eb8ce9fa689b (patch) | |
| tree | 3da2ae4167a27330f8b823d24deed284d65105c9 /mrbgems/mruby-socket | |
| parent | 97933665b6c427348983bab936a5d855f1384712 (diff) | |
| download | mruby-3618556a95957f82f6fd853af239eb8ce9fa689b.tar.gz mruby-3618556a95957f82f6fd853af239eb8ce9fa689b.zip | |
struct sockaddr_un can be shorter than struct sockaddr.
ref: https://github.com/iij/mruby-socket/issues/45
Diffstat (limited to 'mrbgems/mruby-socket')
| -rw-r--r-- | mrbgems/mruby-socket/src/socket.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c index 037400077..5a8db93d7 100644 --- a/mrbgems/mruby-socket/src/socket.c +++ b/mrbgems/mruby-socket/src/socket.c @@ -664,19 +664,15 @@ mrb_socket_listen(mrb_state *mrb, mrb_value klass) static mrb_value mrb_socket_sockaddr_family(mrb_state *mrb, mrb_value klass) { - mrb_value sa; + const struct sockaddr *sa; + mrb_value str; - mrb_get_args(mrb, "S", &sa); -#ifdef __linux__ - if ((size_t)RSTRING_LEN(sa) < offsetof(struct sockaddr, sa_family) + sizeof(sa_family_t)) { - mrb_raisef(mrb, E_SOCKET_ERROR, "invalid sockaddr (too short)"); - } -#else - if ((size_t)RSTRING_LEN(sa) < sizeof(struct sockaddr)) { + mrb_get_args(mrb, "S", &str); + if ((size_t)RSTRING_LEN(str) < offsetof(struct sockaddr, sa_family) + sizeof(sa_family_t)) { mrb_raisef(mrb, E_SOCKET_ERROR, "invalid sockaddr (too short)"); } -#endif - return mrb_fixnum_value(((struct sockaddr *)RSTRING_PTR(sa))->sa_family); + sa = (const struct sockaddr *)RSTRING_PTR(str); + return mrb_fixnum_value(sa->sa_family); } static mrb_value |
