Mercurial > hg > nginx
view src/os/unix/ngx_time.h @ 7120:874171c3c71a
Fixed handling of non-null-terminated unix sockets.
At least FreeBSD, macOS, NetBSD, and OpenBSD can return unix sockets
with non-null-terminated sun_path. Additionally, the address may become
non-null-terminated if it does not fit into the buffer provided and was
truncated (may happen on macOS, NetBSD, and Solaris, which allow unix socket
addresess larger than struct sockaddr_un). As such, ngx_sock_ntop() might
overread the sockaddr provided, as it used "%s" format and thus assumed
null-terminated string.
To fix this, the ngx_strnlen() function was introduced, and it is now used
to calculate correct length of sun_path.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 04 Oct 2017 21:19:38 +0300 |
parents | d620f497c50f |
children |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGX_TIME_H_INCLUDED_ #define _NGX_TIME_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> typedef ngx_rbtree_key_t ngx_msec_t; typedef ngx_rbtree_key_int_t ngx_msec_int_t; typedef struct tm ngx_tm_t; #define ngx_tm_sec tm_sec #define ngx_tm_min tm_min #define ngx_tm_hour tm_hour #define ngx_tm_mday tm_mday #define ngx_tm_mon tm_mon #define ngx_tm_year tm_year #define ngx_tm_wday tm_wday #define ngx_tm_isdst tm_isdst #define ngx_tm_sec_t int #define ngx_tm_min_t int #define ngx_tm_hour_t int #define ngx_tm_mday_t int #define ngx_tm_mon_t int #define ngx_tm_year_t int #define ngx_tm_wday_t int #if (NGX_HAVE_GMTOFF) #define ngx_tm_gmtoff tm_gmtoff #define ngx_tm_zone tm_zone #endif #if (NGX_SOLARIS) #define ngx_timezone(isdst) (- (isdst ? altzone : timezone) / 60) #else #define ngx_timezone(isdst) (- (isdst ? timezone + 3600 : timezone) / 60) #endif void ngx_timezone_update(void); void ngx_localtime(time_t s, ngx_tm_t *tm); void ngx_libc_localtime(time_t s, struct tm *tm); void ngx_libc_gmtime(time_t s, struct tm *tm); #define ngx_gettimeofday(tp) (void) gettimeofday(tp, NULL); #define ngx_msleep(ms) (void) usleep(ms * 1000) #define ngx_sleep(s) (void) sleep(s) #endif /* _NGX_TIME_H_INCLUDED_ */