Re: segfaults with cyrus-imapd 3.0.9 on latest arch linux

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 20.03.19 um 13:39 schrieb Patrick Goetz:

It would appear that --disable-pcre is a configuration option you can't actually use.


yes, it seems so. the defines in the header:

#ifdef ENABLE_REGEX
# ifdef HAVE_PCREPOSIX_H
#  include <pcre.h>
#  include <pcreposix.h>
# else /* !HAVE_PCREPOSIX_H */
#  ifdef HAVE_RXPOSIX_H
#   include <rxposix.h>
#  else /* !HAVE_RXPOSIX_H */
#   include <regex.h>
#  endif /* HAVE_RXPOSIX_H */
# endif /* HAVE_PCREPOSIX_H */
#endif /* ENABLE_REGEX */

configure.ac:

if test "$enable_pcre" != "no"; then
        AC_CHECK_HEADER(pcreposix.h)
        if test "$ac_cv_header_pcreposix_h" = "yes"; then
            AC_MSG_CHECKING(for utf8 enabled pcre)
            AC_CACHE_VAL(cyrus_cv_pcre_utf8, AC_TRY_CPP([#include <pcreposix.h>
#ifndef REG_UTF8
#include </nonexistent>
#endif],cyrus_cv_pcre_utf8=yes,cyrus_cv_pcre_utf8=no))
            AC_MSG_RESULT($cyrus_cv_pcre_utf8)
        else
            cyrus_cv_pcre_utf8="no"
        fi

        if test "$cyrus_cv_pcre_utf8" = "yes"; then
                LIBS="$LIBS -lpcre -lpcreposix";
                AC_DEFINE(ENABLE_REGEX, [], [Do we have a regex library?])
                AC_DEFINE(HAVE_PCREPOSIX_H, [], [Do we have usable pcre library?])
        else
                AC_CHECK_HEADERS(rxposix.h)
                if test "$ac_cv_header_rxposix_h" = "yes"; then
                        LIBS="$LIBS -lrx"
                        AC_DEFINE(ENABLE_REGEX, [],
                                  [Do we have a regex library?])
                else
                        AC_SEARCH_LIBS(regcomp, regex,
                                        AC_DEFINE(ENABLE_REGEX, [],
                                        [Do we have a regex library?]), [])
                fi
        fi
fi

the whole block depends on "$enable_pcre", so if I disable pcre, i disable regexp conpletely. I think, it should look like this:

if test "$enable_pcre" != "no"; then
        AC_CHECK_HEADER(pcreposix.h)
        if test "$ac_cv_header_pcreposix_h" = "yes"; then
            AC_MSG_CHECKING(for utf8 enabled pcre)
            AC_CACHE_VAL(cyrus_cv_pcre_utf8, AC_TRY_CPP([#include <pcreposix.h>
#ifndef REG_UTF8
#include </nonexistent>
#endif],cyrus_cv_pcre_utf8=yes,cyrus_cv_pcre_utf8=no))
            AC_MSG_RESULT($cyrus_cv_pcre_utf8)
        else
            cyrus_cv_pcre_utf8="no"
        fi

        if test "$cyrus_cv_pcre_utf8" = "yes"; then
                LIBS="$LIBS -lpcre -lpcreposix";
                AC_DEFINE(ENABLE_REGEX, [], [Do we have a regex library?])
                AC_DEFINE(HAVE_PCREPOSIX_H, [], [Do we have usable pcre library?])
        fi
else
        cyrus_cv_pcre_utf8="no"
        AC_CHECK_HEADERS(rxposix.h)
        if test "$ac_cv_header_rxposix_h" = "yes"; then
                LIBS="$LIBS -lrx"
                AC_DEFINE(ENABLE_REGEX, [], [Do we have a regex library?])
        else
                AC_SEARCH_LIBS(regcomp, regex, AC_DEFINE(ENABLE_REGEX, [], [Do we have a regex libra
ry?]), [])
        fi
fi

if you don't disable pcre, you must have pcre available, otherwise no regexp because there's no fallback.
if you disable pcre, it checks for rposix.h and fallsback to anything providing regcomp. if nothing is found, no regexp support.

As diff:

--- configure.ac.org	2019-03-15 01:31:20.000000000 +0100
+++ configure.ac	2019-03-20 19:19:05.077550582 +0100
@@ -674,18 +674,16 @@ if test "$enable_pcre" != "no"; then
                 LIBS="$LIBS -lpcre -lpcreposix";
                 AC_DEFINE(ENABLE_REGEX, [], [Do we have a regex library?])
                 AC_DEFINE(HAVE_PCREPOSIX_H, [], [Do we have usable pcre library?])
-        else
-                AC_CHECK_HEADERS(rxposix.h)
-                if test "$ac_cv_header_rxposix_h" = "yes"; then
-                        LIBS="$LIBS -lrx"
-                        AC_DEFINE(ENABLE_REGEX, [],
-                                  [Do we have a regex library?])
-                else
-                        AC_SEARCH_LIBS(regcomp, regex,
-                                        AC_DEFINE(ENABLE_REGEX, [],
-                                        [Do we have a regex library?]), [])
-                fi
         fi
+else
+	cyrus_cv_pcre_utf8="no"
+	AC_CHECK_HEADERS(rxposix.h)
+	if test "$ac_cv_header_rxposix_h" = "yes"; then
+		LIBS="$LIBS -lrx"
+		AC_DEFINE(ENABLE_REGEX, [], [Do we have a regex library?])
+	else
+		AC_SEARCH_LIBS(regcomp, regex, AC_DEFINE(ENABLE_REGEX, [], [Do we have a regex library?]), [])
+	fi
 fi
dnl look for an option to disable sign-comparison warnings (needed for

with this change:

./configure --disable-pcre

$ egrep 'REGEX|PCRE' config.h
#define ENABLE_REGEX /**/
/* #undef HAVE_PCREPOSIX_H */

./configure --disable-pcre

$ egrep 'REGEX|PCRE' config.h
#define ENABLE_REGEX /**/
#define HAVE_PCREPOSIX_H /**/


seems to work, but as I said, I'm not a software guy and i don't know autotools, there's probably a better solution.

Regards,
-ap

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

----
Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus

[Index of Archives]     [Cyrus SASL]     [Squirrel Mail]     [Asterisk PBX]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [KDE]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux