[vlc-devel] [PATCH] vlc_strftime: avoid infinite loop on windows when format string is invalid

Romain Vimont rom at rom1v.com
Thu Jan 25 16:04:09 CET 2018


On Thu, Jan 25, 2018 at 03:16:05PM +0100, Romain Vimont wrote:
> On Thu, Jan 25, 2018 at 02:44:12PM +0100, Pierre Lamot wrote:
> > ---
> >  src/text/strings.c | 7 +++++++
> >  1 file changed, 7 insertions(+)
> > 
> > diff --git a/src/text/strings.c b/src/text/strings.c
> > index 4b282bb397..cc26745f07 100644
> > --- a/src/text/strings.c
> > +++ b/src/text/strings.c
> > @@ -506,6 +506,13 @@ char *vlc_strftime( const char *tformat )
> >              char *ret = realloc (str, len + 1);
> >              return ret ? ret : str; /* <- this cannot fail */
> >          }
> > +#ifdef _WIN32
> > +        else if ( errno == EINVAL ) /* ie: invalid tformat */
> 
> Since strftime() returning 0 does not necessarily indicate an error,
> errno should be set to 0 before the call (otherwise, it may contain
> garbage value).
> 
> But I think this corner case is not handled correctly anyway in this
> function.

And for good reasons:

> BUGS
> If the output string would exceed max bytes, errno is not set. This
> makes it impossible to distinguish this error case from cases where
> the format string legitimately produces a zero-length output string.

> "man strftime" says:
> 
> > For example, in many locales %p yields an empty string.
> 
> > +        {
> > +            free(str);
> > +            return NULL;
> > +        }
> > +#endif
> >          free (str);
> >      }
> >      vlc_assert_unreachable ();
> > -- 
> > 2.14.1
> > 
> > _______________________________________________
> > vlc-devel mailing list
> > To unsubscribe or modify your subscription options:
> > https://mailman.videolan.org/listinfo/vlc-devel
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list