Pair va_copy calls with va_end
According to the specs, each va_copy call should be matched by a va_end call to ensure proper cleanup. Furthermore, since message filters might iterate over the list of arguments, we should hand a new copy to each filter.
This commit is contained in:
parent
60c1dd1744
commit
04bc8d3195
|
@ -231,7 +231,7 @@ static void messagePos( TidyDocImpl* doc, TidyReportLevel level, uint code,
|
||||||
{
|
{
|
||||||
va_list args_copy;
|
va_list args_copy;
|
||||||
va_copy(args_copy, args);
|
va_copy(args_copy, args);
|
||||||
TY_(tmbvsnprintf)(messageBuf, sizeMessageBuf, msg, args);
|
TY_(tmbvsnprintf)(messageBuf, sizeMessageBuf, msg, args_copy);
|
||||||
if ( doc->mssgFilt )
|
if ( doc->mssgFilt )
|
||||||
{
|
{
|
||||||
TidyDoc tdoc = tidyImplToDoc( doc );
|
TidyDoc tdoc = tidyImplToDoc( doc );
|
||||||
|
@ -245,6 +245,8 @@ static void messagePos( TidyDocImpl* doc, TidyReportLevel level, uint code,
|
||||||
consistent, we have to ensure that we only ever return the
|
consistent, we have to ensure that we only ever return the
|
||||||
built-in English version of this string. */
|
built-in English version of this string. */
|
||||||
TidyDoc tdoc = tidyImplToDoc( doc );
|
TidyDoc tdoc = tidyImplToDoc( doc );
|
||||||
|
va_end(args_copy);
|
||||||
|
va_copy(args_copy, args);
|
||||||
go = go | doc->mssgFilt2( tdoc, level, line, col, tidyDefaultString(code), args_copy );
|
go = go | doc->mssgFilt2( tdoc, level, line, col, tidyDefaultString(code), args_copy );
|
||||||
}
|
}
|
||||||
if ( doc->mssgFilt3 )
|
if ( doc->mssgFilt3 )
|
||||||
|
@ -253,8 +255,11 @@ static void messagePos( TidyDocImpl* doc, TidyReportLevel level, uint code,
|
||||||
messages via their own means by providing a key string and
|
messages via their own means by providing a key string and
|
||||||
the parameters to fill it. */
|
the parameters to fill it. */
|
||||||
TidyDoc tdoc = tidyImplToDoc( doc );
|
TidyDoc tdoc = tidyImplToDoc( doc );
|
||||||
|
va_end(args_copy);
|
||||||
|
va_copy(args_copy, args);
|
||||||
go = go | doc->mssgFilt3( tdoc, level, line, col, tidyErrorCodeAsString(code), args_copy );
|
go = go | doc->mssgFilt3( tdoc, level, line, col, tidyErrorCodeAsString(code), args_copy );
|
||||||
}
|
}
|
||||||
|
va_end(args_copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( go )
|
if ( go )
|
||||||
|
|
Loading…
Reference in a new issue