@@ -86,7 +86,7 @@ typedef struct {
8686 /* zval info */
8787 const char * name ;
8888 unsigned name_size ;
89- int required ;
89+ bool required ;
9090
9191 /* structure info */
9292 size_t field_offset ; /* 0 to pass full structure, e.g. when more than
@@ -584,9 +584,9 @@ static void to_zval_read_sin_addr(const char *data, zval *zv, res_context *ctx)
584584 Z_STRLEN_P (zv ) = strlen (Z_STRVAL_P (zv ));
585585}
586586static const field_descriptor descriptors_sockaddr_in [] = {
587- {"family" , sizeof ("family" ), 0 , offsetof(struct sockaddr_in , sin_family ), from_zval_write_sa_family , to_zval_read_sa_family },
588- {"addr" , sizeof ("addr" ), 0 , offsetof(struct sockaddr_in , sin_addr ), from_zval_write_sin_addr , to_zval_read_sin_addr },
589- {"port" , sizeof ("port" ), 0 , offsetof(struct sockaddr_in , sin_port ), from_zval_write_net_uint16 , to_zval_read_net_uint16 },
587+ {"family" , sizeof ("family" ), false , offsetof(struct sockaddr_in , sin_family ), from_zval_write_sa_family , to_zval_read_sa_family },
588+ {"addr" , sizeof ("addr" ), false , offsetof(struct sockaddr_in , sin_addr ), from_zval_write_sin_addr , to_zval_read_sin_addr },
589+ {"port" , sizeof ("port" ), false , offsetof(struct sockaddr_in , sin_port ), from_zval_write_net_uint16 , to_zval_read_net_uint16 },
590590 {0 }
591591};
592592static void from_zval_write_sockaddr_in (const zval * container , char * sockaddr , ser_context * ctx )
@@ -635,11 +635,11 @@ static void to_zval_read_sin6_addr(const char *data, zval *zv, res_context *ctx)
635635 Z_STRLEN_P (zv ) = strlen (Z_STRVAL_P (zv ));
636636}
637637static const field_descriptor descriptors_sockaddr_in6 [] = {
638- {"family" , sizeof ("family" ), 0 , offsetof(struct sockaddr_in6 , sin6_family ), from_zval_write_sa_family , to_zval_read_sa_family },
639- {"addr" , sizeof ("addr" ), 0 , offsetof(struct sockaddr_in6 , sin6_addr ), from_zval_write_sin6_addr , to_zval_read_sin6_addr },
640- {"port" , sizeof ("port" ), 0 , offsetof(struct sockaddr_in6 , sin6_port ), from_zval_write_net_uint16 , to_zval_read_net_uint16 },
641- {"flowinfo" , sizeof ("flowinfo" ), 0 , offsetof(struct sockaddr_in6 , sin6_flowinfo ), from_zval_write_uint32 , to_zval_read_uint32 },
642- {"scope_id" , sizeof ("scope_id" ), 0 , offsetof(struct sockaddr_in6 , sin6_scope_id ), from_zval_write_uint32 , to_zval_read_uint32 },
638+ {"family" , sizeof ("family" ), false , offsetof(struct sockaddr_in6 , sin6_family ), from_zval_write_sa_family , to_zval_read_sa_family },
639+ {"addr" , sizeof ("addr" ), false , offsetof(struct sockaddr_in6 , sin6_addr ), from_zval_write_sin6_addr , to_zval_read_sin6_addr },
640+ {"port" , sizeof ("port" ), false , offsetof(struct sockaddr_in6 , sin6_port ), from_zval_write_net_uint16 , to_zval_read_net_uint16 },
641+ {"flowinfo" , sizeof ("flowinfo" ), false , offsetof(struct sockaddr_in6 , sin6_flowinfo ), from_zval_write_uint32 , to_zval_read_uint32 },
642+ {"scope_id" , sizeof ("scope_id" ), false , offsetof(struct sockaddr_in6 , sin6_scope_id ), from_zval_write_uint32 , to_zval_read_uint32 },
643643 {0 }
644644};
645645static void from_zval_write_sockaddr_in6 (const zval * container , char * sockaddr6 , ser_context * ctx )
@@ -1269,10 +1269,11 @@ static void from_zval_write_ifindex(const zval *zv, char *uinteger, ser_context
12691269#elif defined(SIOCGIFINDEX )
12701270 {
12711271 struct ifreq ifr ;
1272- if (strlcpy (ifr .ifr_name , ZSTR_VAL (str ), sizeof (ifr .ifr_name ))
1273- >= sizeof (ifr .ifr_name )) {
1272+ if (ZSTR_LEN (str ) >= sizeof (ifr .ifr_name )) {
12741273 do_from_zval_err (ctx , "the interface name \"%s\" is too large " , ZSTR_VAL (str ));
1275- } else if (ioctl (ctx -> sock -> bsd_socket , SIOCGIFINDEX , & ifr ) < 0 ) {
1274+ }
1275+ memcpy (ifr .ifr_name , ZSTR_VAL (str ), ZSTR_LEN (str ) + 1 );
1276+ if (ioctl (ctx -> sock -> bsd_socket , SIOCGIFINDEX , & ifr ) < 0 ) {
12761277 if (errno == ENODEV ) {
12771278 do_from_zval_err (ctx , "no interface with name \"%s\" could be "
12781279 "found" , ZSTR_VAL (str ));
@@ -1301,8 +1302,8 @@ static void from_zval_write_ifindex(const zval *zv, char *uinteger, ser_context
13011302
13021303/* CONVERSIONS for struct in6_pktinfo */
13031304static const field_descriptor descriptors_in6_pktinfo [] = {
1304- {"addr" , sizeof ("addr" ), 1 , offsetof(struct in6_pktinfo , ipi6_addr ), from_zval_write_sin6_addr , to_zval_read_sin6_addr },
1305- {"ifindex" , sizeof ("ifindex" ), 1 , offsetof(struct in6_pktinfo , ipi6_ifindex ), from_zval_write_ifindex , to_zval_read_unsigned },
1305+ {"addr" , sizeof ("addr" ), true , offsetof(struct in6_pktinfo , ipi6_addr ), from_zval_write_sin6_addr , to_zval_read_sin6_addr },
1306+ {"ifindex" , sizeof ("ifindex" ), true , offsetof(struct in6_pktinfo , ipi6_ifindex ), from_zval_write_ifindex , to_zval_read_unsigned },
13061307 {0 }
13071308};
13081309void from_zval_write_in6_pktinfo (const zval * container , char * in6_pktinfo_c , ser_context * ctx )
@@ -1321,25 +1322,25 @@ void to_zval_read_in6_pktinfo(const char *data, zval *zv, res_context *ctx)
13211322#if defined(SO_PASSCRED ) || defined(LOCAL_CREDS_PERSISTENT ) || defined(LOCAL_CREDS )
13221323static const field_descriptor descriptors_ucred [] = {
13231324#if defined(LOCAL_CREDS_PERSISTENT )
1324- {"pid" , sizeof ("pid" ), 1 , offsetof(struct sockcred2 , sc_pid ), from_zval_write_pid_t , to_zval_read_pid_t },
1325- {"uid" , sizeof ("uid" ), 1 , offsetof(struct sockcred2 , sc_euid ), from_zval_write_uid_t , to_zval_read_uid_t },
1325+ {"pid" , sizeof ("pid" ), true , offsetof(struct sockcred2 , sc_pid ), from_zval_write_pid_t , to_zval_read_pid_t },
1326+ {"uid" , sizeof ("uid" ), true , offsetof(struct sockcred2 , sc_euid ), from_zval_write_uid_t , to_zval_read_uid_t },
13261327 /* the type gid_t is the same as uid_t: */
1327- {"gid" , sizeof ("gid" ), 1 , offsetof(struct sockcred2 , sc_egid ), from_zval_write_uid_t , to_zval_read_uid_t },
1328+ {"gid" , sizeof ("gid" ), true , offsetof(struct sockcred2 , sc_egid ), from_zval_write_uid_t , to_zval_read_uid_t },
13281329#elif defined(LOCAL_CREDS )
1329- {"pid" , sizeof ("pid" ), 1 , offsetof(struct sockcred , sc_pid ), from_zval_write_pid_t , to_zval_read_pid_t },
1330- {"uid" , sizeof ("uid" ), 1 , offsetof(struct sockcred , sc_euid ), from_zval_write_uid_t , to_zval_read_uid_t },
1330+ {"pid" , sizeof ("pid" ), true , offsetof(struct sockcred , sc_pid ), from_zval_write_pid_t , to_zval_read_pid_t },
1331+ {"uid" , sizeof ("uid" ), true , offsetof(struct sockcred , sc_euid ), from_zval_write_uid_t , to_zval_read_uid_t },
13311332 /* the type gid_t is the same as uid_t: */
1332- {"gid" , sizeof ("gid" ), 1 , offsetof(struct sockcred , sc_egid ), from_zval_write_uid_t , to_zval_read_uid_t },
1333+ {"gid" , sizeof ("gid" ), true , offsetof(struct sockcred , sc_egid ), from_zval_write_uid_t , to_zval_read_uid_t },
13331334#elif defined(HAVE_STRUCT_CMSGCRED )
1334- {"pid" , sizeof ("pid" ), 1 , offsetof(struct cmsgcred , cmcred_pid ), from_zval_write_pid_t , to_zval_read_pid_t },
1335- {"uid" , sizeof ("uid" ), 1 , offsetof(struct cmsgcred , cmcred_uid ), from_zval_write_uid_t , to_zval_read_uid_t },
1335+ {"pid" , sizeof ("pid" ), true , offsetof(struct cmsgcred , cmcred_pid ), from_zval_write_pid_t , to_zval_read_pid_t },
1336+ {"uid" , sizeof ("uid" ), true , offsetof(struct cmsgcred , cmcred_uid ), from_zval_write_uid_t , to_zval_read_uid_t },
13361337 /* assume the type gid_t is the same as uid_t: */
1337- {"gid" , sizeof ("gid" ), 1 , offsetof(struct cmsgcred , cmcred_gid ), from_zval_write_uid_t , to_zval_read_uid_t },
1338+ {"gid" , sizeof ("gid" ), true , offsetof(struct cmsgcred , cmcred_gid ), from_zval_write_uid_t , to_zval_read_uid_t },
13381339#elif defined(SO_PASSCRED )
1339- {"pid" , sizeof ("pid" ), 1 , offsetof(struct ucred , pid ), from_zval_write_pid_t , to_zval_read_pid_t },
1340- {"uid" , sizeof ("uid" ), 1 , offsetof(struct ucred , uid ), from_zval_write_uid_t , to_zval_read_uid_t },
1340+ {"pid" , sizeof ("pid" ), true , offsetof(struct ucred , pid ), from_zval_write_pid_t , to_zval_read_pid_t },
1341+ {"uid" , sizeof ("uid" ), true , offsetof(struct ucred , uid ), from_zval_write_uid_t , to_zval_read_uid_t },
13411342 /* assume the type gid_t is the same as uid_t: */
1342- {"gid" , sizeof ("gid" ), 1 , offsetof(struct ucred , gid ), from_zval_write_uid_t , to_zval_read_uid_t },
1343+ {"gid" , sizeof ("gid" ), true , offsetof(struct ucred , gid ), from_zval_write_uid_t , to_zval_read_uid_t },
13431344#endif
13441345 {0 }
13451346};
0 commit comments