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