about summary refs log tree commit diff
path: root/resolv
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2019-08-22 12:56:49 +0000
committerJoseph Myers <joseph@codesourcery.com>2019-08-22 12:56:49 +0000
commit42f527c89dabfee80c674ffe6a498a665c6d8281 (patch)
tree1384f0b1f4821ac2d83d28fa1d6de58e380f5871 /resolv
parentc737ef0d647fa5a3a290d2b77fe25fa8ba5b9cb9 (diff)
downloadglibc-42f527c89dabfee80c674ffe6a498a665c6d8281.tar.gz
glibc-42f527c89dabfee80c674ffe6a498a665c6d8281.tar.xz
glibc-42f527c89dabfee80c674ffe6a498a665c6d8281.zip
Mark IDN tests unsupported with libidn2 before 2.0.5.
When using a system (e.g. Ubuntu 18.04) with libidn2 2.0.4 or earlier,
test results include:

FAIL: resolv/tst-resolv-ai_idn
FAIL: resolv/tst-resolv-ai_idn-latin1

It was previously stated
<https://sourceware.org/ml/libc-alpha/2018-05/msg00771.html> that "It
should fail to indicate you have bugs in your system libidn.".
However, the glibc testsuite should be indicating whether there are
bugs in glibc, not whether there are bugs in other system pieces - so
unless you consider it a glibc bug that it fails to work around the
libidn issues, these FAILs are not helpful.  And as a general
principle, it's best for the expected glibc test results to be clean,
with Bugzilla used to track known bugs in glibc itself, rather than
people needing to know about the expected FAILs to tell if there are
problems with their glibc build.  So, while there is an argument that
install.texi (not just the old NEWS entries for 2.28) should explain
the use of libidn2 and that 2.0.5 or later is recommended, test FAILs
are not the right way to indicate the presence of an old libidn2
version.

This patch accordingly makes those tests return UNSUPPORTED for older
libidn2 versions, just as they do when libidn2 isn't present at all.
As implied by that past discussion, it's possible this could result in
UNSUPPORTED for systems with older versions but whatever required
fixes backported so the tests previously passed, if there are any such
systems.

Tested for x86_64 on Ubuntu 18.04, including verifying that putting an
earlier version in place of 2.0.5 results in the tests FAILing whereas
using 2.0.5 as in the patch results in UNSUPPORTED.  Florian reports
that the tests still run on Fedora 30, with libidn 2.2.0.

	* resolv/tst-resolv-ai_idn-latin1.c (do_test): Mark test
	unsupported with libidn2 before 2.0.5.
	* resolv/tst-resolv-ai_idn.c (do_test): Likewise.
Diffstat (limited to 'resolv')
-rw-r--r--resolv/tst-resolv-ai_idn-latin1.c5
-rw-r--r--resolv/tst-resolv-ai_idn.c5
2 files changed, 10 insertions, 0 deletions
diff --git a/resolv/tst-resolv-ai_idn-latin1.c b/resolv/tst-resolv-ai_idn-latin1.c
index 4a6bf5623c..5c515958c2 100644
--- a/resolv/tst-resolv-ai_idn-latin1.c
+++ b/resolv/tst-resolv-ai_idn-latin1.c
@@ -29,6 +29,11 @@ do_test (void)
   void *handle = dlopen (LIBIDN2_SONAME, RTLD_LAZY);
   if (handle == NULL)
     FAIL_UNSUPPORTED ("libidn2 not installed");
+  void *check_ver_sym = xdlsym (handle, "idn2_check_version");
+  const char *check_res
+    = ((const char *(*) (const char *)) check_ver_sym) ("2.0.5");
+  if (check_res == NULL)
+    FAIL_UNSUPPORTED ("libidn2 too old");
 
   if (setlocale (LC_CTYPE, "en_US.ISO-8859-1") == NULL)
     FAIL_EXIT1 ("setlocale: %m");
diff --git a/resolv/tst-resolv-ai_idn.c b/resolv/tst-resolv-ai_idn.c
index 493d1c7741..046842769a 100644
--- a/resolv/tst-resolv-ai_idn.c
+++ b/resolv/tst-resolv-ai_idn.c
@@ -28,6 +28,11 @@ do_test (void)
   void *handle = dlopen (LIBIDN2_SONAME, RTLD_LAZY);
   if (handle == NULL)
     FAIL_UNSUPPORTED ("libidn2 not installed");
+  void *check_ver_sym = xdlsym (handle, "idn2_check_version");
+  const char *check_res
+    = ((const char *(*) (const char *)) check_ver_sym) ("2.0.5");
+  if (check_res == NULL)
+    FAIL_UNSUPPORTED ("libidn2 too old");
 
   if (setlocale (LC_CTYPE, "en_US.UTF-8") == NULL)
     FAIL_EXIT1 ("setlocale: %m");