Tobias Heider([email protected]) on 2019.08.16 00:06:59 +0200:
> > If that's already on your list, feel free to beat me to it ;-)
> 
> Sure, if you will test it for me. Here's a fix for the segfault.
> 
> It seems the initial mistake was that yyerror() does not exit.
> Instead one has to use YYERROR (or err() as the check above does).
> I opted for YYERROR, but i don't think it makes a difference as both
> are used throughout the file.
> 
> Ok?

yes, this is ok benno@


/Benno


> 
> Index: parse.y
> ===================================================================
> RCS file: /cvs/src/sbin/iked/parse.y,v
> retrieving revision 1.81
> diff -u -p -u -r1.81 parse.y
> --- parse.y   28 Jun 2019 13:32:44 -0000      1.81
> +++ parse.y   15 Aug 2019 21:35:16 -0000
> @@ -750,8 +750,10 @@ transform        : AUTHXF STRING                 {
>                           sizeof(struct ipsec_xf *));
>                       if (xfs == NULL)
>                               err(1, "transform: recallocarray");
> -                     if ((xfs[nxfs] = parse_xf($2, 0, authxfs)) == NULL)
> +                     if ((xfs[nxfs] = parse_xf($2, 0, authxfs)) == NULL) {
>                               yyerror("%s not a valid transform", $2);
> +                             YYERROR;
> +                     }
>                       ipsec_transforms->authxf = xfs;
>                       ipsec_transforms->nauthxf++;
>               }
> @@ -762,8 +764,10 @@ transform        : AUTHXF STRING                 {
>                           sizeof(struct ipsec_xf *));
>                       if (xfs == NULL)
>                               err(1, "transform: recallocarray");
> -                     if ((xfs[nxfs] = parse_xf($2, 0, encxfs)) == NULL)
> +                     if ((xfs[nxfs] = parse_xf($2, 0, encxfs)) == NULL) {
>                               yyerror("%s not a valid transform", $2);
> +                             YYERROR;
> +                     }
>                       ipsec_transforms->encxf = xfs;
>                       ipsec_transforms->nencxf++;
>               }
> @@ -774,8 +778,10 @@ transform        : AUTHXF STRING                 {
>                           sizeof(struct ipsec_xf *));
>                       if (xfs == NULL)
>                               err(1, "transform: recallocarray");
> -                     if ((xfs[nxfs] = parse_xf($2, 0, prfxfs)) == NULL)
> +                     if ((xfs[nxfs] = parse_xf($2, 0, prfxfs)) == NULL) {
>                               yyerror("%s not a valid transform", $2);
> +                             YYERROR;
> +                     }
>                       ipsec_transforms->prfxf = xfs;
>                       ipsec_transforms->nprfxf++;
>               }
> @@ -786,8 +792,10 @@ transform        : AUTHXF STRING                 {
>                           sizeof(struct ipsec_xf *));
>                       if (xfs == NULL)
>                               err(1, "transform: recallocarray");
> -                     if ((xfs[nxfs] = parse_xf($2, 0, groupxfs)) == NULL)
> +                     if ((xfs[nxfs] = parse_xf($2, 0, groupxfs)) == NULL) {
>                               yyerror("%s not a valid transform", $2);
> +                             YYERROR;
> +                     }
>                       ipsec_transforms->groupxf = xfs;
>                       ipsec_transforms->ngroupxf++;
>               }
> 

Reply via email to