TEST_NLATTR_OBJECT and TEST_NLATTR_ARRAY fault when sizeof(obj) - 1 > DEFAULT_STRLEN

JingPiao Chen chenjingpiao at gmail.com
Mon Jul 3 00:05:42 UTC 2017


On Mon, Jul 03, 2017 at 01:22:52AM +0300, Dmitry V. Levin wrote:
> On Sun, Jul 02, 2017 at 12:12:54PM +0800, JingPiao Chen wrote:
> > when sizeof(obj) - 1 > DEFAULT_STRLEN, we print all string,
> > but strace print "STR"..., so the test fault.
> > This appear when I test packet_diag_msg PACKET_DIAG_MCLIST.
> 
> Does this patch solve it?

Can solve it.

> 
> --- a/tests/test_nlattr.h
> +++ b/tests/test_nlattr.h
> @@ -99,20 +99,19 @@ print_nlattr(const unsigned int nla_len, const char *const nla_type)
>  			   init_msg_, print_msg_,			\
>  			   nla_type_, pattern_, obj_, ...)		\
>  	do {								\
> +		const size_t plen = sizeof(obj_) - 1 > DEFAULT_STRLEN	\
> +			? DEFAULT_STRLEN : sizeof(obj_) - 1;		\
>  		/* len < sizeof(obj_) */				\
>  		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
>  			(init_msg_), (print_msg_),			\
>  			(nla_type_), #nla_type_,			\
> -			sizeof(obj_) - 1,				\
> -			(pattern_), sizeof(obj_) - 1,			\
> -			printf("\"%.*s\"",				\
> -			(int) sizeof(obj_) - 1,	(pattern_)));		\
> +			plen, (pattern_), plen,				\
> +			printf("\"%.*s\"", (int) plen, (pattern_)));	\
>  		/* short read of sizeof(obj_) */			\
>  		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
>  			(init_msg_), (print_msg_),			\
>  			(nla_type_), #nla_type_,			\
> -			sizeof(obj_),					\
> -			(pattern_), sizeof(obj_) - 1,			\
> +			sizeof(obj_), (pattern_), plen,			\

I think here not need to replace with plen.
So can we named str_len instead of plen?

>  			printf("%p",					\
>  			       RTA_DATA(NLMSG_ATTR(nlh, (hdrlen_)))));	\
>  		/* sizeof(obj_) */					\
> @@ -128,15 +127,15 @@ print_nlattr(const unsigned int nla_len, const char *const nla_type)
>  			  init_msg_, print_msg_,			\
>  			  nla_type_, pattern_, obj_, print_elem_)	\
>  	do {								\
> +		const size_t plen =					\
> +			sizeof((obj_)[0]) - 1 > DEFAULT_STRLEN		\
> +			? DEFAULT_STRLEN : sizeof((obj_)[0]) - 1;	\
>  		/* len < sizeof((obj_)[0]) */				\
>  		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
>  			(init_msg_), (print_msg_),			\
>  			(nla_type_), #nla_type_,			\
> -			sizeof((obj_)[0]) - 1,				\
> -			(pattern_), sizeof((obj_)[0]) - 1,		\
> -			printf("\"%.*s\"",				\
> -			       (int) sizeof((obj_)[0]) - 1,		\
> -			       (pattern_)));				\
> +			plen, (pattern_), plen,				\
> +			printf("\"%.*s\"", (int) plen, (pattern_)));	\
>  		/* sizeof((obj_)[0]) < len < sizeof(obj_) */		\
>  		TEST_NLATTR_((fd_), (nlh0_), (hdrlen_),			\
>  			(init_msg_), (print_msg_),			\
> 

This patch require the caller define DEFAULT_STRLEN,
can we define DEFAULT_STRLEN in test_nlattr.h or tests.h?
Why we define DEFAULT_STRLEN dispersedly?

--
JingPiao Chen




More information about the Strace-devel mailing list