On Tue, Mar 14, 2017 at 12:14:42PM +0100, Jeremie Courreges-Anglas wrote:
> Theo Buehler <t...@math.ethz.ch> writes:
> 
> > On Tue, Mar 14, 2017 at 09:35:37AM +0100, Reinhold Straub wrote:
> >> ok?
> >> 
> >> On 06.03.17 18:18, Reinhold Straub wrote:
> >> > Hi all,
> >> > 
> >> > pdfgrep has been updated to v. 2.0.1
> >> > 
> >> > It has a new option: --cache, which needs additional dependencies and 
> >> > some modification to the pledge(2) syscalls.
> >> > 
> >> > Most of our previous patches have been accepted upstream.
> >
> > Thanks. Your patch didn't apply cleanly, so I regenerated it, see below.
> > Apply with 'patch -E'.
> >
> > Your diff looks good and the port builds fine and all tests pass.
> > However, I ran into the following problem with any pdf file:
> >
> > $ LC_CTYPE=en_US.UTF-8 pdfgrep RFC /tmp/slides.pdf
> > terminate called after throwing an instance of 'std::runtime_error'
> >   what():  locale::facet::_S_create_c_locale name not valid
> > Abort trap (core dumped)
> >
> > This is new, the old port works fine in the UTF-8 locale.
> >
> > Unsurprisingly, the problem is the locale call in src/pdfgrep.cc
> >
> >    434              // Set locale to user-preference. If this locale is an 
> > UTF-8 locale, the
> >    435              // regex-functions regcomp/regexec become unicode 
> > aware, which means
> >    436              // e.g. that '.' will match a unicode character, not a 
> > single byte.
> >    437              locale::global(locale(""));
> >
> > commenting it out works around the problem. I have no idea what the
> > proper fix is.
> 
> I don't think a proper fix is possible.  I had suggested a "fix" for
> libstdc++v3 in base.
> 
>   http://marc.info/?l=openbsd-ports&m=148154492428992&w=2
> 
> Maybe silencing this assertion in libestdc++ is the sanest way to deal
> with this.  Or you could just comment the call to
> 
>   locale::global(locale(""));
> 
> Our locale support is limited anyway...
> 

Alright, thanks. As I said previously, commenting this out works. This
is pretty disgusting. I don't really know how badly pcre will react to
this, but I guess it can't be worse than the segfault.

The cure that worked in the other thread (using gcc4) obviously won't
help here, so here's the diff with the line commented.

Index: Makefile
===================================================================
RCS file: /var/cvs/ports/textproc/pdfgrep/Makefile,v
retrieving revision 1.5
diff -u -p -r1.5 Makefile
--- Makefile    15 Jan 2016 19:57:24 -0000      1.5
+++ Makefile    14 Mar 2017 21:09:20 -0000
@@ -2,7 +2,7 @@
 
 COMMENT =              tool to search text in PDF files
 
-DISTNAME =             pdfgrep-1.4.1
+DISTNAME =             pdfgrep-2.0.1
 
 CATEGORIES =           textproc
 
@@ -18,11 +18,12 @@ MODGCC4_ARCHS =             *
 MODGCC4_LANGS =                c++
 
 # uses pledge()
-WANTLIB +=             c m pthread poppler-cpp pcre
+WANTLIB +=             c m pthread poppler-cpp pcre gcrypt gpg-error
 
 MASTER_SITES =         https://pdfgrep.org/download/
 
-LIB_DEPENDS =          print/poppler
+LIB_DEPENDS =          print/poppler \
+                       security/libgcrypt
 TEST_DEPENDS =         devel/dejagnu \
                        print/texlive/base
 
Index: distinfo
===================================================================
RCS file: /var/cvs/ports/textproc/pdfgrep/distinfo,v
retrieving revision 1.3
diff -u -p -r1.3 distinfo
--- distinfo    15 Jan 2016 19:42:40 -0000      1.3
+++ distinfo    14 Mar 2017 09:34:21 -0000
@@ -1,2 +1,2 @@
-SHA256 (pdfgrep-1.4.1.tar.gz) = 2wSiEOa7e3fNbFSxfw9v7Q0SOoX5elQbJwc2pdOEDyw=
-SIZE (pdfgrep-1.4.1.tar.gz) = 151926
+SHA256 (pdfgrep-2.0.1.tar.gz) = A3DXRLMHLUc4Pb7Sy5yLC2S4PAhNpaiWH41Lx2aelB4=
+SIZE (pdfgrep-2.0.1.tar.gz) = 187217
Index: patches/patch-src_pdfgrep_cc
===================================================================
RCS file: /var/cvs/ports/textproc/pdfgrep/patches/patch-src_pdfgrep_cc,v
retrieving revision 1.1
diff -u -p -r1.1 patch-src_pdfgrep_cc
--- patches/patch-src_pdfgrep_cc        15 Jan 2016 19:42:40 -0000      1.1
+++ patches/patch-src_pdfgrep_cc        14 Mar 2017 21:08:31 -0000
@@ -1,27 +1,49 @@
-$OpenBSD: patch-src_pdfgrep_cc,v 1.1 2016/01/15 19:42:40 sthen Exp $
---- src/pdfgrep.cc.orig        Wed Sep 16 21:06:49 2015
-+++ src/pdfgrep.cc     Fri Jan 15 11:39:19 2016
-@@ -569,6 +569,11 @@ void handle_poppler_errors(const std::string &msg, voi
- 
+$OpenBSD$
+
+disable locale::global(locale("")) to avoid a segfault in the UTF-8 locale.
+--- src/pdfgrep.cc.orig        Sat Mar  4 09:11:53 2017
++++ src/pdfgrep.cc     Tue Mar 14 22:07:41 2017
+@@ -423,12 +423,18 @@ static void handle_poppler_errors(const string &msg, v
  int main(int argc, char** argv)
  {
-+      if (pledge("stdio rpath tty", NULL) == -1) {
+       Options options;
++
++      if (pledge("stdio rpath wpath cpath tty", NULL) == -1) {
 +              fprintf (stderr, "pdfgrep: pledge\n");
 +              exit (1);
 +      }
 +
-       init_colors();
+       init_colors(options.outconf.colors);
+ 
+       // Set locale to user-preference. If this locale is an UTF-8 locale, the
+       // regex-functions regcomp/regexec become unicode aware, which means
+       // e.g. that '.' will match a unicode character, not a single byte.
+-      locale::global(locale(""));
++      // locale::global(locale(""));
  
        enum re_engine_type {
-@@ -773,6 +778,11 @@ int main(int argc, char** argv)
-       } else if (context == -2) {
-               // on non-terminals, always print the whole line
-               context = -1;
-+      }
-+
-+      if (pledge("stdio rpath", NULL) == -1) {
+               RE_POSIX = 0,
+@@ -649,6 +655,11 @@ int main(int argc, char** argv)
+       bool color_tty = isatty(STDOUT_FILENO) && getenv("TERM") &&
+               strcmp(getenv("TERM"), "dumb");
+ 
++      if (pledge("stdio rpath wpath cpath", NULL) == -1) {
 +              fprintf (stderr, "pdfgrep: pledge\n");
 +              exit (1);
++      }
++
+       options.outconf.color =
+               use_colors == COLOR_ALWAYS
+               || (use_colors == COLOR_AUTO && color_tty);
+@@ -689,6 +700,11 @@ int main(int argc, char** argv)
+                       char *limitstr = getenv("PDFGREP_CACHE_LIMIT");
+                       unsigned int limit = limitstr ? strtoul(limitstr, NULL, 
10) : 200;
+                       limit_cachesize(options.cache_directory.c_str(), limit);
++              }
++      } else {
++              if (pledge("stdio rpath", NULL) == -1) {
++                      fprintf (stderr, "pdfgrep: pledge\n");
++                      exit (1);
+               }
        }
  
-       if (excludes_empty(includes))
Index: patches/patch-src_regengine_cc
===================================================================
RCS file: patches/patch-src_regengine_cc
diff -N patches/patch-src_regengine_cc
--- patches/patch-src_regengine_cc      15 Jan 2016 19:42:40 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,16 +0,0 @@
-$OpenBSD: patch-src_regengine_cc,v 1.1 2016/01/15 19:42:40 sthen Exp $
-
-Convert empty expressions into something that regex(3) will accept.
-
---- src/regengine.cc.orig      Fri Jan 15 19:37:30 2016
-+++ src/regengine.cc   Fri Jan 15 19:38:06 2016
-@@ -34,6 +34,9 @@ PosixRegex::PosixRegex(const char *pattern, bool case_
- {
-       int regex_flags = REG_EXTENDED | (case_insensitive ? REG_ICASE : 0);
- 
-+      if (strncmp(pattern, "", 2) == 0) {
-+              pattern = "()";
-+      }
-       int err = regcomp(&this->regex, pattern, regex_flags);
-       if(err) {
-               char err_msg[256];
Index: patches/patch-testsuite_Makefile_in
===================================================================
RCS file: patches/patch-testsuite_Makefile_in
diff -N patches/patch-testsuite_Makefile_in
--- patches/patch-testsuite_Makefile_in 15 Jan 2016 19:42:40 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-$OpenBSD: patch-testsuite_Makefile_in,v 1.1 2016/01/15 19:42:40 sthen Exp $
---- testsuite/Makefile.in.orig Tue Sep 29 18:18:42 2015
-+++ testsuite/Makefile.in      Tue Sep 29 18:18:27 2015
-@@ -643,7 +643,7 @@ uninstall-am:
- .PRECIOUS: Makefile
- 
- 
--export DEJAGNU
-+# export DEJAGNU
- 
- # Tell versions [3.59,3.63) of GNU make to not export all variables.
- # Otherwise a system limit (for SysV at least) may be exceeded.
Index: patches/patch-testsuite_lib_pdfgrep_exp
===================================================================
RCS file: patches/patch-testsuite_lib_pdfgrep_exp
diff -N patches/patch-testsuite_lib_pdfgrep_exp
--- patches/patch-testsuite_lib_pdfgrep_exp     15 Jan 2016 19:42:40 -0000      
1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-$OpenBSD: patch-testsuite_lib_pdfgrep_exp,v 1.1 2016/01/15 19:42:40 sthen Exp $
---- testsuite/lib/pdfgrep.exp.orig     Wed Jan 13 15:06:57 2016
-+++ testsuite/lib/pdfgrep.exp  Wed Jan 13 15:12:42 2016
-@@ -213,7 +213,7 @@ proc reset_configuration {} {
- 
- # The directory where the PDFs will be generated.
- # NOTE This will frequently be removed, so don't put important data there
--set pdfdir [exec mktemp --tmpdir -d pdfgrep_tests.XXXXXXXXXX]
-+set pdfdir [exec mktemp -t -d pdfgrep_tests.XXXXXXXXXX]
- 
- 
- # Delete $pdfdir recursively and create it anew
Index: patches/patch-testsuite_pdfgrep_tests_exit_status_exp
===================================================================
RCS file: patches/patch-testsuite_pdfgrep_tests_exit_status_exp
diff -N patches/patch-testsuite_pdfgrep_tests_exit_status_exp
--- patches/patch-testsuite_pdfgrep_tests_exit_status_exp       15 Jan 2016 
19:42:40 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
-$OpenBSD: patch-testsuite_pdfgrep_tests_exit_status_exp,v 1.1 2016/01/15 
19:42:40 sthen Exp $
---- testsuite/pdfgrep.tests/exit_status.exp.orig       Wed Jan 13 15:07:29 2016
-+++ testsuite/pdfgrep.tests/exit_status.exp    Wed Jan 13 15:10:27 2016
-@@ -8,7 +8,7 @@ clear_pdfdir
- set pdf [mkpdf exit-status "foobar"]
- 
- pdfgrep foobar $pdf
--
-+expect eof
- expect_exit_status 0
- 
- ########################################
-@@ -40,5 +40,5 @@ clear_pdfdir
- 
- # $pdf doesn't exist anymore
- pdfgrep foobar $pdf
--
-+expect eof
- expect_exit_status 2
Index: patches/patch-testsuite_pdfgrep_tests_usage_exp
===================================================================
RCS file: patches/patch-testsuite_pdfgrep_tests_usage_exp
diff -N patches/patch-testsuite_pdfgrep_tests_usage_exp
--- patches/patch-testsuite_pdfgrep_tests_usage_exp     15 Jan 2016 19:42:40 
-0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-$OpenBSD: patch-testsuite_pdfgrep_tests_usage_exp,v 1.1 2016/01/15 19:42:40 
sthen Exp $
---- testsuite/pdfgrep.tests/usage.exp.orig     Wed Jan 13 15:07:55 2016
-+++ testsuite/pdfgrep.tests/usage.exp  Wed Jan 13 15:11:50 2016
-@@ -5,7 +5,7 @@ expect {
-     -re "^Usage: .*" { pass $test }
-     default { fail $test }
- }
--
-+expect eof
- expect_exit_status 2
- 
- # Also look that nothing is written to stdout

Reply via email to