Subject: Re: bug#64908: 29.1; svg parse failure

From: Eli Zaretskii <[email-masked]>
Date: Sat, 05 Aug 2023 13:41:20 +0300

> Date: Sat, 5 Aug 2023 11:24:19 +0100
> From: Alan Third <[email-masked]>
> Cc: [email-masked], [email-masked]
> 
> On Sat, Aug 05, 2023 at 01:07:38PM +0300, Eli Zaretskii wrote:
> > > Date: Sat, 5 Aug 2023 10:58:26 +0100
> > > From: Alan Third <[email-masked]>
> > > Cc: Eli Zaretskii <[email-masked]>, [email-masked]
> > > 
> > > diff --git a/src/image.c b/src/image.c
> > > index c9420b48f4a..96e0f2a7225 100644
> > > --- a/src/image.c
> > > +++ b/src/image.c
> > > @@ -11161,6 +11161,21 @@ svg_css_length_to_pixels (RsvgLength length, double dpi, int font_size)
> > >      case RSVG_UNIT_IN:
> > >        value *= dpi;
> > >        break;
> > > +    case RSVG_UNIT_PERCENT:
> > > +      /* Percent is a ratio of the containing "viewport".  We don't
> > > +	 have a viewport, as such, as we try to draw the image to it's
> > > +	 own desired size rather than dictate the size as if we were
> > > +	 drawing icons on a toolbar or similar.  This means that
> > > +	 percent values are useless to us and we are best off just
> > > +	 drawing the image according to whatever other sizes we can
> > > +	 derive.
> > > +
> > > +	 If we do set explicit width and height values in the image
> > > +	 spec, this will work out correctly as librsvg will still
> > > +	 honour the percentage sizes in its final rendering no matter
> > > +	 what size we make the image.  */
> > > +      value = 0;
> > > +      break;
> > 
> > I don't see RSVG_UNIT_PERCENT anywhere in the librsvg headers on my
> > system, so perhaps this was introduced by some later version, and
> > should be guarded by LIBRSVG_CHECK_VERSION?
> 
> Hmm, I can't find any reference to when it was introduced, so it's
> probably easier just to remove it and put the comment in the default
> case.

My guess is it was introduced in v2.46, as the entire code of
svg_css_length_to_pixels is guarded by that version.  So I think using
RSVG_UNIT_PERCENT in that function is fine.