]> granicus.if.org Git - curl/commitdiff
url: don't use bad offset in tld_check_name to show error
authorJay Satiro <raysatiro@yahoo.com>
Sat, 26 Mar 2016 18:41:35 +0000 (14:41 -0400)
committerJay Satiro <raysatiro@yahoo.com>
Sat, 26 Mar 2016 18:41:35 +0000 (14:41 -0400)
libidn's tld_check_lz returns an error offset of the first character
that it failed to process, however that offset is not a byte offset and
may not even be in the locale encoding therefore we can't use it to show
the user the character that failed to process.

Bug: https://github.com/curl/curl/issues/731
Reported-by: Karlson2k
lib/url.c

index d165d9c0a7443852973aa1ce1e0ff91cdf411958..f9c8068ea2b09a83a7bfd3a7499df3ab9f315ce5 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -3728,17 +3728,16 @@ static bool tld_check_name(struct SessionHandle *data,
   if(rc != IDNA_SUCCESS)
     return FALSE;
 
+  /* Warning: err_pos receives "the decoded character offset rather than the
+     byte position in the string." And as of libidn 1.32 that character offset
+     is for UTF-8, even if the passed in string is another locale. */
   rc = tld_check_lz(uc_name, &err_pos, NULL);
 #ifndef CURL_DISABLE_VERBOSE_STRINGS
 #ifdef HAVE_TLD_STRERROR
   if(rc != TLD_SUCCESS)
     tld_errmsg = tld_strerror((Tld_rc)rc);
 #endif
-  if(rc == TLD_INVALID)
-    infof(data, "WARNING: %s; pos %u = `%c'/0x%02X\n",
-          tld_errmsg, err_pos, uc_name[err_pos],
-          uc_name[err_pos] & 255);
-  else if(rc != TLD_SUCCESS)
+  if(rc != TLD_SUCCESS)
     infof(data, "WARNING: TLD check for %s failed; %s\n",
           uc_name, tld_errmsg);
 #endif /* CURL_DISABLE_VERBOSE_STRINGS */