mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
Gisle Vanem provided code that displays an error message when the (libidn
based) IDN conversion fails. This is really due to a missing suitable function in the libidn API that I hope we can remove once libidn gets a function like this.
This commit is contained in:
parent
6b3e3095ea
commit
19b284c214
6
CHANGES
6
CHANGES
@ -6,6 +6,12 @@
|
|||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
Daniel (2 October 2004)
|
||||||
|
- Gisle Vanem provided code that displays an error message when the (libidn
|
||||||
|
based) IDN conversion fails. This is really due to a missing suitable
|
||||||
|
function in the libidn API that I hope we can remove once libidn gets a
|
||||||
|
function like this.
|
||||||
|
|
||||||
Daniel (1 October 2004)
|
Daniel (1 October 2004)
|
||||||
- Aleksandar Milivojevic reported a problem in the Redhat bugzilla (see
|
- Aleksandar Milivojevic reported a problem in the Redhat bugzilla (see
|
||||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134133) and not to
|
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=134133) and not to
|
||||||
|
@ -27,6 +27,10 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifdef USE_LIBIDN
|
||||||
|
#include <idna.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "strerror.h"
|
#include "strerror.h"
|
||||||
|
|
||||||
#define _MPRINTF_REPLACE /* use our functions only */
|
#define _MPRINTF_REPLACE /* use our functions only */
|
||||||
@ -556,3 +560,68 @@ const char *Curl_strerror(struct connectdata *conn, int err)
|
|||||||
*p = '\0';
|
*p = '\0';
|
||||||
return buf;
|
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)
|
||||||
|
{
|
||||||
|
const char *str;
|
||||||
|
char *buf;
|
||||||
|
size_t max;
|
||||||
|
|
||||||
|
curlassert(conn);
|
||||||
|
|
||||||
|
buf = conn->syserr_buf;
|
||||||
|
max = sizeof(conn->syserr_buf)-1;
|
||||||
|
|
||||||
|
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 = "Roundtrip 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", (int)err);
|
||||||
|
str = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (str)
|
||||||
|
strncpy(buf, str, max);
|
||||||
|
buf[max] = '\0';
|
||||||
|
return (buf);
|
||||||
|
}
|
||||||
|
#endif /* USE_LIBIDN */
|
||||||
|
@ -27,4 +27,8 @@
|
|||||||
|
|
||||||
const char *Curl_strerror (struct connectdata *conn, int err);
|
const char *Curl_strerror (struct connectdata *conn, int err);
|
||||||
|
|
||||||
|
#ifdef USE_LIBIDN
|
||||||
|
const char *Curl_idn_strerror (struct connectdata *conn, int err);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -116,6 +116,7 @@ void idn_free (void *ptr); /* prototype from idn-free.h, not provided by
|
|||||||
#include "progress.h"
|
#include "progress.h"
|
||||||
#include "cookie.h"
|
#include "cookie.h"
|
||||||
#include "strequal.h"
|
#include "strequal.h"
|
||||||
|
#include "strerror.h"
|
||||||
#include "escape.h"
|
#include "escape.h"
|
||||||
#include "strtok.h"
|
#include "strtok.h"
|
||||||
#include "share.h"
|
#include "share.h"
|
||||||
@ -2078,8 +2079,8 @@ static void fix_hostname(struct connectdata *conn, struct hostname *host)
|
|||||||
infof (data, "Input domain encoded as `%s'\n",
|
infof (data, "Input domain encoded as `%s'\n",
|
||||||
stringprep_locale_charset ());
|
stringprep_locale_charset ());
|
||||||
if (rc != IDNA_SUCCESS)
|
if (rc != IDNA_SUCCESS)
|
||||||
infof(data, "Failed to convert %s to ACE; IDNA error %d\n",
|
infof(data, "Failed to convert %s to ACE; %s\n",
|
||||||
host->name, rc);
|
host->name, Curl_idn_strerror(conn,rc));
|
||||||
else {
|
else {
|
||||||
host->encalloc = ace_hostname;
|
host->encalloc = ace_hostname;
|
||||||
/* change the name pointer to point to the encoded hostname */
|
/* change the name pointer to point to the encoded hostname */
|
||||||
|
Loading…
Reference in New Issue
Block a user