On Thu, Dec 27, 2018 at 09:22:31PM +0100, Matthias Kilian wrote:
> Hi,
> 
> this fixes build with poppler-0.72.0 for me (at least on i386).
> 
> It would be nice if someone could try wether it also build with our old
> poppler (0.61.1), so the fix could go in before the poppler update.

Builds fine with old poppler (0.61.1) on amd64.


> 
> Ciao,
>       Kili
> 
> Index: patches/patch-pdf-backend_cc
> ===================================================================
> RCS file: patches/patch-pdf-backend_cc
> diff -N patches/patch-pdf-backend_cc
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-pdf-backend_cc      27 Dec 2018 20:20:31 -0000
> @@ -0,0 +1,49 @@
> +$OpenBSD$
> +
> +Fix with newer poppler.
> +
> +From upstream commit 82699eee6b071c1f80682987d6842f4b61d024be.
> +
> +Index: pdf-backend.cc
> +--- pdf-backend.cc.orig
> ++++ pdf-backend.cc
> +@@ -226,7 +226,7 @@ const std::string pdf::Document::get_xmp()
> +   mstring.reset(this->readMetadata());
> +   if (mstring.get() == nullptr)
> +     return "";
> +-  const char *cstring = mstring->getCString();
> ++  const char *cstring = pdf::get_c_string(*mstring);
> +   if (strncmp(cstring, "<?xpacket begin=", 16) != 0)
> +     return "";
> +   cstring += 16;
> +@@ -393,7 +393,7 @@ pdf::Metadata::Metadata(pdf::Document &document)
> +     char tzs = 0; int tzh = 0, tzm = 0;
> +     if (!pdf::dict_lookup(info_dict, field.first, &object)->isString())
> +       continue;
> +-    const char *input = object.getString()->getCString();
> ++    const char *input = pdf::get_c_string(object.getString());
> +     if (input[0] == 'D' && input[1] == ':')
> +       input += 2;
> +     int year = scan_date_digits(input, 4);
> +@@ -617,6 +617,21 @@ namespace pdf
> +     }
> +     return stream;
> +   }
> ++}
> ++
> ++template<typename S> static auto get_c_string_impl(const S &str) -> 
> decltype(str.c_str())
> ++{
> ++  return str.c_str();
> ++}
> ++
> ++template<typename S> static auto get_c_string_impl(const S &str) -> 
> decltype(str.getCString())
> ++{
> ++  return str.getCString();
> ++}
> ++
> ++const char * pdf::get_c_string(const pdf::String &str)
> ++{
> ++  return get_c_string_impl<pdf::String>(str);
> + }
> + 
> + // vim:ts=2 sts=2 sw=2 et
> Index: patches/patch-pdf-backend_hh
> ===================================================================
> RCS file: patches/patch-pdf-backend_hh
> diff -N patches/patch-pdf-backend_hh
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-pdf-backend_hh      27 Dec 2018 20:20:31 -0000
> @@ -0,0 +1,24 @@
> +$OpenBSD$
> +
> +Fix with newer poppler.
> +
> +From upstream commit 82699eee6b071c1f80682987d6842f4b61d024be.
> +
> +Index: pdf-backend.hh
> +--- pdf-backend.hh.orig
> ++++ pdf-backend.hh
> +@@ -433,6 +433,14 @@ namespace pdf
> + 
> +   double get_path_area(pdf::splash::Path &path);
> + 
> ++  const char * get_c_string(const pdf::String &str);
> ++
> ++  inline const char * get_c_string(const pdf::String *str)
> ++  {
> ++    return get_c_string(*str);
> ++  }
> ++
> ++
> + }
> + 
> + #endif
> Index: patches/patch-pdf-unicode_cc
> ===================================================================
> RCS file: patches/patch-pdf-unicode_cc
> diff -N patches/patch-pdf-unicode_cc
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-pdf-unicode_cc      27 Dec 2018 20:20:31 -0000
> @@ -0,0 +1,18 @@
> +$OpenBSD$
> +
> +Fix with newer poppler.
> +
> +From upstream commit 82699eee6b071c1f80682987d6842f4b61d024be.
> +
> +Index: pdf-unicode.cc
> +--- pdf-unicode.cc.orig
> ++++ pdf-unicode.cc
> +@@ -53,7 +53,7 @@ std::string pdf::string_as_utf8(const pdf::String *str
> +      * for description of both UTF-16 and UTF-8.
> +      */
> +     const static uint32_t replacement_character = 0xFFFD;
> +-    const char *cstring = string->getCString();
> ++    const char *cstring = pdf::get_c_string(string);
> + #if POPPLER_VERSION < 3500
> +     size_t clength = const_cast<pdf::String *>(string)->getLength();
> + #else
> Index: patches/patch-pdf2djvu_cc
> ===================================================================
> RCS file: patches/patch-pdf2djvu_cc
> diff -N patches/patch-pdf2djvu_cc
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-pdf2djvu_cc 27 Dec 2018 20:20:31 -0000
> @@ -0,0 +1,27 @@
> +$OpenBSD$
> +
> +Fix with newer poppler.
> +
> +From upstream commit 82699eee6b071c1f80682987d6842f4b61d024be.
> +
> +Index: pdf2djvu.cc
> +--- pdf2djvu.cc.orig
> ++++ pdf2djvu.cc
> +@@ -456,7 +456,7 @@ class MutedRenderer: public pdf::Renderer (public)
> +     switch (link_action->getKind())
> +     {
> +     case actionURI:
> +-      uri += 
> dynamic_cast<pdf::link::URI*>(link_action)->getURI()->getCString();
> ++      uri += 
> pdf::get_c_string(dynamic_cast<pdf::link::URI*>(link_action)->getURI());
> +       break;
> +     case actionGoTo:
> +     {
> +@@ -1396,7 +1396,7 @@ static int xmain(int argc, char * const argv[])
> +       #pragma omp critical
> +       {
> +         debug(0)--;
> +-        debug(1) << doc->getFileName()->getCString() << ":" << std::endl;
> ++        debug(1) << pdf::get_c_string(doc->getFileName()) << ":" << 
> std::endl;
> +         debug(0)++;
> +       }
> +       out1.reset(new MainRenderer(paper_color, config.monochrome));
> 

-- 
Antoine

Reply via email to