summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCalle Dybedahl <calle@init.se>2015-03-20 20:33:18 +0100
committerCalle Dybedahl <calle@init.se>2015-03-20 20:33:18 +0100
commit77223a21c47dffe669b192634b2c00ceb3641a23 (patch)
treed91777de098e5defd242ae628e96db21df2af3fd
parentac5100c8cd834e64a8babd7f98353486583b6b61 (diff)
Minor IDN fixes.
-rw-r--r--src/LDNS.xs24
-rw-r--r--t/idn.t7
2 files changed, 18 insertions, 13 deletions
diff --git a/src/LDNS.xs b/src/LDNS.xs
index 110285e..c3cef69 100644
--- a/src/LDNS.xs
+++ b/src/LDNS.xs
@@ -16,18 +16,21 @@ to_idn(...)
int status;
SV *obj = ST(i);
- status = idna_to_ascii_8z(SvPV_nolen(obj), &out, IDNA_ALLOW_UNASSIGNED);
- if (status == IDNA_SUCCESS)
+ if (SvPOK(ST(i)))
{
- SV *new = newSVpv(out,0);
- SvUTF8_on(new); /* We know the string is plain ASCII, so let Perl know too */
- mXPUSHs(new);
+ status = idna_to_ascii_8z(SvPVutf8_nolen(obj), &out, IDNA_ALLOW_UNASSIGNED);
+ if (status == IDNA_SUCCESS)
+ {
+ SV *new = newSVpv(out,0);
+ SvUTF8_on(new); /* We know the string is plain ASCII, so let Perl know too */
+ mXPUSHs(new);
+ free(out);
+ }
+ else
+ {
+ croak("Error: %s\n", idna_strerror(status));
+ }
}
- else
- {
- croak("Error: %s\n", idna_strerror(status));
- }
- free(out);
}
#else
croak("libidn not installed");
@@ -2084,6 +2087,7 @@ rr_nsec3_covers(obj,name)
ldns_rr2canonical(clone);
hashed = ldns_nsec3_hash_name_frm_nsec3(clone, dname);
chopped = ldns_dname_left_chop(dname);
+ ldns_rdf_deep_free(dname);
ldns_dname_cat(hashed,chopped);
RETVAL = ldns_nsec_covers_name(clone,hashed);
ldns_rdf_deep_free(hashed);
diff --git a/t/idn.t b/t/idn.t
index 13a7366..f93fc93 100644
--- a/t/idn.t
+++ b/t/idn.t
@@ -2,6 +2,7 @@ use Test::More;
use Test::Fatal;
use Encode;
use Devel::Peek;
+use utf8;
BEGIN { use_ok( "Net::LDNS" => qw[:all] ) }
@@ -12,10 +13,10 @@ if (exception {to_idn("whatever")} =~ /libidn not installed/) {
}
ok(has_idn(), 'Has IDN');
-my $encoded = to_idn( decode( 'utf8', 'annaröd.se' ) );
+my $encoded = to_idn( 'annaröd.se' );
is( $encoded, 'xn--annard-0xa.se', 'One name encoded right' );
-my @before = map { decode( 'utf8', $_ ) } ('annaröd.se', 'rindlöw.se', 'räksmörgås.se', 'nic.中國', 'iis.se');
+my @before = ('annaröd.se', 'rindlöw.se', 'räksmörgås.se', 'nic.中國', 'iis.se');
my @many = to_idn @before;
is_deeply(
\@many,
@@ -23,6 +24,6 @@ is_deeply(
'Many encoded right'
);
-like( exception { to_idn( decode( 'utf8', "ö" x 63 ) ) }, qr/Punycode/, 'Boom today' );
+like( exception { to_idn( "ö" x 63 ) }, qr/Punycode/, 'Boom today' );
done_testing;