Commit 3d144ab9 authored by Jay Satiro's avatar Jay Satiro
Browse files

url: don't use bad offset in tld_check_name to show error

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
parent 4adee194
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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 */