mirror of
https://github.com/curl/curl.git
synced 2026-08-04 09:30:03 +03:00
idn: switch to libidn2 use and IDNA2008 support
CVE-2016-8625 Bug: https://curl.haxx.se/docs/adv_20161102K.html Reported-by: Christian Heimes
This commit is contained in:
parent
42b650b9ea
commit
9c91ec7781
8 changed files with 66 additions and 254 deletions
|
|
@ -35,8 +35,8 @@
|
|||
|
||||
#include <curl/curl.h>
|
||||
|
||||
#ifdef USE_LIBIDN
|
||||
#include <idna.h>
|
||||
#ifdef USE_LIBIDN2
|
||||
#include <idn2.h>
|
||||
#endif
|
||||
|
||||
#ifdef USE_WINDOWS_SSPI
|
||||
|
|
@ -726,83 +726,6 @@ const char *Curl_strerror(struct connectdata *conn, int err)
|
|||
return buf;
|
||||
}
|
||||
|
||||
#ifdef USE_LIBIDN
|
||||
/*
|
||||
* Return error-string for libidn status as returned from idna_to_ascii_lz().
|
||||
*/
|
||||
const char *Curl_idn_strerror (struct connectdata *conn, int err)
|
||||
{
|
||||
#ifdef HAVE_IDNA_STRERROR
|
||||
(void)conn;
|
||||
return idna_strerror((Idna_rc) err);
|
||||
#else
|
||||
const char *str;
|
||||
char *buf;
|
||||
size_t max;
|
||||
|
||||
DEBUGASSERT(conn);
|
||||
|
||||
buf = conn->syserr_buf;
|
||||
max = sizeof(conn->syserr_buf)-1;
|
||||
*buf = '\0';
|
||||
|
||||
#ifndef CURL_DISABLE_VERBOSE_STRINGS
|
||||
switch ((Idna_rc)err) {
|
||||
case IDNA_SUCCESS:
|
||||
str = "No error";
|
||||
break;
|
||||
case IDNA_STRINGPREP_ERROR:
|
||||
str = "Error in string preparation";
|
||||
break;
|
||||
case IDNA_PUNYCODE_ERROR:
|
||||
str = "Error in Punycode operation";
|
||||
break;
|
||||
case IDNA_CONTAINS_NON_LDH:
|
||||
str = "Illegal ASCII characters";
|
||||
break;
|
||||
case IDNA_CONTAINS_MINUS:
|
||||
str = "Contains minus";
|
||||
break;
|
||||
case IDNA_INVALID_LENGTH:
|
||||
str = "Invalid output length";
|
||||
break;
|
||||
case IDNA_NO_ACE_PREFIX:
|
||||
str = "No ACE prefix (\"xn--\")";
|
||||
break;
|
||||
case IDNA_ROUNDTRIP_VERIFY_ERROR:
|
||||
str = "Round trip verify error";
|
||||
break;
|
||||
case IDNA_CONTAINS_ACE_PREFIX:
|
||||
str = "Already have ACE prefix (\"xn--\")";
|
||||
break;
|
||||
case IDNA_ICONV_ERROR:
|
||||
str = "Locale conversion failed";
|
||||
break;
|
||||
case IDNA_MALLOC_ERROR:
|
||||
str = "Allocation failed";
|
||||
break;
|
||||
case IDNA_DLOPEN_ERROR:
|
||||
str = "dlopen() error";
|
||||
break;
|
||||
default:
|
||||
snprintf(buf, max, "error %d", err);
|
||||
str = NULL;
|
||||
break;
|
||||
}
|
||||
#else
|
||||
if((Idna_rc)err == IDNA_SUCCESS)
|
||||
str = "No error";
|
||||
else
|
||||
str = "Error";
|
||||
#endif
|
||||
if(str)
|
||||
strncpy(buf, str, max);
|
||||
buf[max] = '\0';
|
||||
return (buf);
|
||||
#endif
|
||||
}
|
||||
#endif /* USE_LIBIDN */
|
||||
|
||||
#ifdef USE_WINDOWS_SSPI
|
||||
const char *Curl_sspi_strerror (struct connectdata *conn, int err)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue