]> granicus.if.org Git - postgresql/commitdiff
Reject use of ucol_strcollUTF8() before ICU 53
authorPeter Eisentraut <peter_e@gmx.net>
Thu, 10 Aug 2017 00:34:51 +0000 (20:34 -0400)
committerPeter Eisentraut <peter_e@gmx.net>
Fri, 11 Aug 2017 02:14:00 +0000 (22:14 -0400)
Various bugs can cause crashes, so don't use that function before ICU
53.  It will fall back to the code path used for other encodings.

Since we now tie the function availability to an ICU version, we don't
need the configure test anymore.  That also resolves the issue that the
test result was previously hardcoded for Windows.

researched by Daniel Verite <daniel@manitou-mail.org>, Peter Geoghegan
<pg@bowt.ie>, Tom Lane <tgl@sss.pgh.pa.us>

Discussion: https://www.postgresql.org/message-id/flat/f1438ec6-22aa-4029-9a3b-26f79d330e72%40manitou-mail.org

configure
configure.in
src/include/pg_config.h.in
src/include/pg_config.h.win32
src/include/utils/pg_locale.h

index 7218a31407939dc2ed19ee8d3a277e46ba439a00..cc6471bba6fe2027c3896f2fffee087be6c7d39a 100755 (executable)
--- a/configure
+++ b/configure
 
 
 
-  # ucol_strcollUTF8() appeared in ICU 50, so check if we have it.
-  # ICU functions are macros, so we need to do this the long way.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ucol_strcollUTF8" >&5
-$as_echo_n "checking for ucol_strcollUTF8... " >&6; }
-if ${pgac_cv_func_ucol_strcollUTF8+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_LIBS=$LIBS
-LIBS="$ICU_LIBS $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <unicode/ucol.h>
-
-int
-main ()
-{
-ucol_strcollUTF8(NULL, NULL, 0, NULL, 0, NULL);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  pgac_cv_func_ucol_strcollUTF8=yes
-else
-  pgac_cv_func_ucol_strcollUTF8=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_func_ucol_strcollUTF8" >&5
-$as_echo "$pgac_cv_func_ucol_strcollUTF8" >&6; }
-  if test "$pgac_cv_func_ucol_strcollUTF8" = yes ; then
-
-$as_echo "#define HAVE_UCOL_STRCOLLUTF8 1" >>confdefs.h
-
-  fi
-
   CPPFLAGS=$ac_save_CPPFLAGS
 fi
 
index 44987cdc1ec63c6e176239fb5c71fa778d4d6813..5c036e7f4204082eeb976747328b9fdac50b8f6f 100644 (file)
@@ -1662,22 +1662,6 @@ if test "$with_icu" = yes; then
   AC_CHECK_HEADER(unicode/ucol.h, [],
         [AC_MSG_ERROR([header file <unicode/ucol.h> is required for ICU])])
 
-  # ucol_strcollUTF8() appeared in ICU 50, so check if we have it.
-  # ICU functions are macros, so we need to do this the long way.
-  AC_CACHE_CHECK([for ucol_strcollUTF8], [pgac_cv_func_ucol_strcollUTF8],
-[ac_save_LIBS=$LIBS
-LIBS="$ICU_LIBS $LIBS"
-AC_LINK_IFELSE([AC_LANG_PROGRAM(
-[#include <unicode/ucol.h>
-],
-[ucol_strcollUTF8(NULL, NULL, 0, NULL, 0, NULL);])],
-[pgac_cv_func_ucol_strcollUTF8=yes],
-[pgac_cv_func_ucol_strcollUTF8=no])
-LIBS=$ac_save_LIBS])
-  if test "$pgac_cv_func_ucol_strcollUTF8" = yes ; then
-    AC_DEFINE([HAVE_UCOL_STRCOLLUTF8], 1, [Define to 1 if you have the `ucol_strcollUTF8' function.])
-  fi
-
   CPPFLAGS=$ac_save_CPPFLAGS
 fi
 
index 7a05c7e5b856c078fa82ba77bcdebdad8977a967..dcb7a1a3209ccf42b8ff529bbf233a5c5fc1cac1 100644 (file)
 /* Define to 1 if you have the external array `tzname'. */
 #undef HAVE_TZNAME
 
-/* Define to 1 if you have the `ucol_strcollUTF8' function. */
-#undef HAVE_UCOL_STRCOLLUTF8
-
 /* Define to 1 if you have the <ucred.h> header file. */
 #undef HAVE_UCRED_H
 
index 9d3021ced8808afb6c6abaad4a68e103b0db0a04..7f60670fa6f42f01f25b9488c02c336d635a9085 100644 (file)
 /* Define to 1 if you have the external array `tzname'. */
 /* #undef HAVE_TZNAME */
 
-/* Define to 1 if you have the `ucol_strcollUTF8' function. */
-#define HAVE_UCOL_STRCOLLUTF8 1
-
 /* Define to 1 if the system has the type `uint64'. */
 /* #undef HAVE_UINT64 */
 
index a02d27ba266021f6ae900c30f0678ba842e4a56e..f3e04d4d8cee66c08bf848f8da067e97250878b4 100644 (file)
 
 #include "utils/guc.h"
 
+#ifdef USE_ICU
+/*
+ * ucol_strcollUTF8() was introduced in ICU 50, but it is buggy before ICU 53.
+ * (see
+ * <https://www.postgresql.org/message-id/flat/f1438ec6-22aa-4029-9a3b-26f79d330e72%40manitou-mail.org>)
+ */
+#if U_ICU_VERSION_MAJOR_NUM >= 53
+#define HAVE_UCOL_STRCOLLUTF8 1
+#else
+#undef HAVE_UCOL_STRCOLLUTF8
+#endif
+#endif
+
 
 /* GUC settings */
 extern char *locale_messages;