Hi Andreas,

On Wed, Aug 31, 2016 at 09:32:58AM +0200, Andreas Tille wrote:
> Severity: serious

I'm not sure that making every Doxygen bug that makes it crash or
produce invalid output release critical is useful. If pursuing that
road, one can easily generate a stream of such bugs that makes it
permanently rc-buggy (e.g. try afl) and we should simply release without
it.  Would that be a better outcome? If not, we shouldn't file them at
rc severity and have the consumers (that must know about Doxygen's
fragility) paper over its bugs. I see that this sounds backwards, but if
you don't want breakage, it's probably better to move to sphinx.

> html/latex/structcimg__library_1_1CImg.tex:\subsubsection[{\texorpdfstring{operator\%=(const
>  t value)}{operator%=(const t value)}}]{\setlength{\rightskip}{0pt plus 
> 5cm}{\bf C\+Img}$<$T$>$\& operator\%= (
> html/latex/structcimg__library_1_1CImg.tex:\subsubsection[{\texorpdfstring{operator\%=(const
>  char $\ast$const expression)}{operator%=(const char *const 
> expression)}}]{\setlength{\rightskip}{0pt plus 5cm}{\bf C\+Img}$<$T$>$\& 
> operator\%= (
> html/latex/structcimg__library_1_1CImg.tex:\subsubsection[{\texorpdfstring{operator\%=(const
>  C\+Img$<$ t $>$ \&img)}{operator%=(const CImg< t > 
> &img)}}]{\setlength{\rightskip}{0pt plus 5cm}{\bf C\+Img}$<$T$>$\& 
> operator\%= (
> html/latex/structcimg__library_1_1CImg.tex:\subsubsection[{\texorpdfstring{operator\%(const
>  t value) const }{operator%(const t value) const 
> }}]{\setlength{\rightskip}{0pt plus 5cm}{\bf C\+Img}$<$ typename 
> cimg\+::superset$<$T,t$>$\+::type $>$ operator\% (
> html/latex/structcimg__library_1_1CImg.tex:\subsubsection[{\texorpdfstring{operator\%(const
>  char $\ast$const expression) const }{operator%(const char *const expression) 
> const }}]{\setlength{\rightskip}{0pt plus 5cm}{\bf C\+Img}$<$Tfloat$>$ 
> operator\% (
> html/latex/structcimg__library_1_1CImg.tex:\subsubsection[{\texorpdfstring{operator\%(const
>  C\+Img$<$ t $>$ \&img) const }{operator%(const CImg< t > &img) const 
> }}]{\setlength{\rightskip}{0pt plus 5cm}{\bf C\+Img}$<$ typename 
> cimg\+::superset$<$T,t$>$\+::type $>$ operator\% (

Look closely. The issue is in the second argument to \texorpdfstring.
There only is a single place emitting that macro and it resides in
src/latexgen.cpp. The second argument is escaped using
latexEscapePDFString, which is defined in src/util.cpp.

> --- a/src/util.cpp
> +++ b/src/util.cpp
> @@ -6550,6 +6550,8 @@ void filterLatexString(FTextStream &t,co
>          case '{':  t << "\\{"; break;
>          case '}':  t << "\\}"; break;
>          case '_':  t << "\\_"; break;
> +        case '%':  t << "\\%"; break;
> +        case '&':  t << "\\&"; break;
>          case ' ':  if (keepSpaces) t << "~"; else t << ' ';
>                     break;
>          default:


Looks like you are patching the wrong function (or maybe too few
functions). Can you try whether adding the same escape to
latexEscapePDFString instead of filterLatexString solves your problem?

Thanks in advance.

Helmut

Reply via email to