On Thu, Jul 04, 2019 at 10:03:20PM +0200, Moritz Buhl wrote:
> Hi,
> 
> due to the pfctl regression tests failing on armv7 I noticed that the
> yyerror function is having the usual format attributes. This lead to
> garbage in error messages on armv7. I added the directives and then
> adjusted the formatting to what the compiler suggested.
> 
> The same goes for relayd. A patch will follow.
> 

Some comments inline. Apart from that OK claudio@

> 
> Index: sbin/pfctl/parse.y
> ===================================================================
> RCS file: /cvs/src/sbin/pfctl/parse.y,v
> retrieving revision 1.696
> diff -u -p -r1.696 parse.y
> --- sbin/pfctl/parse.y        8 May 2019 21:31:30 -0000       1.696
> +++ sbin/pfctl/parse.y        4 Jul 2019 14:34:29 -0000
> @@ -83,7 +83,9 @@ int          popfile(void);
>  int           check_file_secrecy(int, const char *);
>  int           yyparse(void);
>  int           yylex(void);
> -int           yyerror(const char *, ...);
> +int             yyerror(const char *, ...)
> +    __attribute__((__format__ (printf, 1, 2)))
> +    __attribute__((__nonnull__ (1)));
>  int           kw_cmp(const void *, const void *);
>  int           lookup(char *);
>  int           igetc(void);
> @@ -1041,7 +1043,7 @@ scrub_opt       : NODF  {
>                               YYERROR;
>                       }
>                       if ($2 < 0 || $2 > 255) {
> -                             yyerror("illegal min-ttl value %d", $2);
> +                             yyerror("illegal min-ttl value %lld", $2);
>                               YYERROR;
>                       }
>                       scrub_opts.marker |= FOM_MINTTL;
> @@ -1053,7 +1055,7 @@ scrub_opt       : NODF  {
>                               YYERROR;
>                       }
>                       if ($2 < 0 || $2 > 65535) {
> -                             yyerror("illegal max-mss value %d", $2);
> +                             yyerror("illegal max-mss value %lld", $2);
>                               YYERROR;
>                       }
>                       scrub_opts.marker |= FOM_MAXMSS;
> @@ -2218,7 +2220,7 @@ filter_set      : prio {
>                               YYERROR;
>                       }
>                       if ($2 < 0 || $2 > 0xffff) {
> -                             yyerror("illegal delay value %d (0-%u)", $2,
> +                             yyerror("illegal delay value %lld (0-%u)", $2,
>                                   0xffff);
>                               YYERROR;
>                       }
> @@ -2289,7 +2291,7 @@ blockspec       : /* empty */           {
>               }
>               | RETURNRST '(' TTL NUMBER ')'  {
>                       if ($4 < 0 || $4 > 255) {
> -                             yyerror("illegal ttl value %d", $4);
> +                             yyerror("illegal ttl value %lld", $4);
>                               YYERROR;
>                       }
>                       $$.b2 = PFRULE_RETURNRST;
> @@ -2339,7 +2341,7 @@ reticmpspec     : STRING                        {
>                       u_int8_t                icmptype;
>  
>                       if ($1 < 0 || $1 > 255) {
> -                             yyerror("invalid icmp code %lu", $1);
> +                             yyerror("invalid icmp code %lld", $1);
>                               YYERROR;
>                       }
>                       icmptype = returnicmpdefault >> 8;
> @@ -2358,7 +2360,7 @@ reticmp6spec    : STRING                        {
>                       u_int8_t                icmptype;
>  
>                       if ($1 < 0 || $1 > 255) {
> -                             yyerror("invalid icmp code %lu", $1);
> +                             yyerror("invalid icmp code %lld", $1);
>                               YYERROR;
>                       }
>                       icmptype = returnicmp6default >> 8;
> @@ -2788,7 +2790,7 @@ host            : STRING                        {
>                       if (strlcpy($$->addr.v.rtlabelname, $2,
>                           sizeof($$->addr.v.rtlabelname)) >=
>                           sizeof($$->addr.v.rtlabelname)) {
> -                             yyerror("route label too long, max %u chars",
> +                             yyerror("route label too long, max %lu chars",
>                                   sizeof($$->addr.v.rtlabelname) - 1);

Since this is a size_t use %zu here.

>                               free($2);
>                               free($$);
> @@ -3014,7 +3016,7 @@ uid             : STRING                        {
>               }
>               | NUMBER                        {
>                       if ($1 < 0 || $1 >= UID_MAX) {
> -                             yyerror("illegal uid value %lu", $1);
> +                             yyerror("illegal uid value %lld", $1);
>                               YYERROR;
>                       }
>                       $$ = $1;
> @@ -3092,7 +3094,7 @@ gid             : STRING                        {
>               }
>               | NUMBER                        {
>                       if ($1 < 0 || $1 >= GID_MAX) {
> -                             yyerror("illegal gid value %lu", $1);
> +                             yyerror("illegal gid value %lld", $1);
>                               YYERROR;
>                       }
>                       $$ = $1;
> @@ -3170,7 +3172,7 @@ icmp_item       : icmptype              {
>               }
>               | icmptype CODE NUMBER  {
>                       if ($3 < 0 || $3 > 255) {
> -                             yyerror("illegal icmp-code %lu", $3);
> +                             yyerror("illegal icmp-code %lld", $3);
>                               YYERROR;
>                       }
>                       $$ = calloc(1, sizeof(struct node_icmp));
> @@ -3215,7 +3217,7 @@ icmp6_item      : icmp6type             {
>               }
>               | icmp6type CODE NUMBER {
>                       if ($3 < 0 || $3 > 255) {
> -                             yyerror("illegal icmp-code %lu", $3);
> +                             yyerror("illegal icmp-code %lld", $3);
>                               YYERROR;
>                       }
>                       $$ = calloc(1, sizeof(struct node_icmp));
> @@ -3242,7 +3244,7 @@ icmptype        : STRING                        {
>               }
>               | NUMBER                        {
>                       if ($1 < 0 || $1 > 255) {
> -                             yyerror("illegal icmp-type %lu", $1);
> +                             yyerror("illegal icmp-type %lld", $1);
>                               YYERROR;
>                       }
>                       $$ = $1 + 1;
> @@ -3263,7 +3265,7 @@ icmp6type       : STRING                        {
>               }
>               | NUMBER                        {
>                       if ($1 < 0 || $1 > 255) {
> -                             yyerror("illegal icmp6-type %lu", $1);
> +                             yyerror("illegal icmp6-type %lld", $1);
>                               YYERROR;
>                       }
>                       $$ = $1 + 1;
> @@ -3871,7 +3873,7 @@ limit_spec      : STRING NUMBER
>                               YYERROR;
>                       }
>                       if (pfctl_set_limit(pf, $1, $2) != 0) {
> -                             yyerror("unable to set limit %s %u", $1, $2);
> +                             yyerror("unable to set limit %s %lld", $1, $2);
>                               free($1);
>                               YYERROR;
>                       }
> @@ -3941,7 +3943,7 @@ disallow_urpf_failed(struct node_host *h
>  {
>       for (; h != NULL; h = h->next)
>               if (h->addr.type == PF_ADDR_URPFFAILED) {
> -                     yyerror(fmt);
> +                     yyerror("%s", fmt);
>                       return (1);
>               }
>       return (0);
> @@ -5731,7 +5733,7 @@ rule_label(struct pf_rule *r, char *s)
>       if (s) {
>               if (strlcpy(r->label, s, sizeof(r->label)) >=
>                   sizeof(r->label)) {
> -                     yyerror("rule label too long (max %d chars)",
> +                     yyerror("rule label too long (max %ld chars)",

Same here, this should be %zu

>                           sizeof(r->label)-1);
>                       return (-1);
>               }
> @@ -5995,7 +5997,7 @@ filteropts_to_rule(struct pf_rule *r, st
>               if (strlcpy(r->qname, opts->queues.qname,
>                   sizeof(r->qname)) >= sizeof(r->qname)) {
>                       yyerror("rule qname too long (max "
> -                         "%d chars)", sizeof(r->qname)-1);
> +                         "%lu chars)", sizeof(r->qname)-1);

Again %zu

>                       return (1);
>               }
>               free(opts->queues.qname);
> @@ -6004,7 +6006,7 @@ filteropts_to_rule(struct pf_rule *r, st
>               if (strlcpy(r->pqname, opts->queues.pqname,
>                   sizeof(r->pqname)) >= sizeof(r->pqname)) {
>                       yyerror("rule pqname too long (max "
> -                         "%d chars)", sizeof(r->pqname)-1);
> +                         "%lu chars)", sizeof(r->pqname)-1);

... and one last %zu

>                       return (1);
>               }
>               free(opts->queues.pqname);
> 

-- 
:wq Claudio

Reply via email to