Commit 956c1058 authored by Narayan Kamath's avatar Narayan Kamath Committed by Adam Seaton
Browse files

IDN: Fix handling of long domain names.

Fix merge conflict into mnc-mr1-release
We were incorrectly using sizeof() to calculate the size of the
output array. Note that this change also changes the output size
to 512 to minimize behavioural differences (especially wrt. ICU
checks on sizes).

bug: 30765246
Change-Id: I5d28ddc45d2d6d2bed3e479ca195ed2779b906ed
(cherry picked from commit a1e0873b)
parent fd8a90b9
......@@ -37,7 +37,8 @@ static jstring NativeIDN_convertImpl(JNIEnv* env, jclass, jstring javaSrc, jint
if (src.get() == NULL) {
return NULL;
}
UChar dst[256];
static const size_t kDstSize = 512;
UChar dst[kDstSize];
UErrorCode status = U_ZERO_ERROR;
// We're stuck implementing IDNA-2003 for now since that's what we specify.
......@@ -47,10 +48,10 @@ static jstring NativeIDN_convertImpl(JNIEnv* env, jclass, jstring javaSrc, jint
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
size_t resultLength = toAscii
? uidna_IDNToASCII(src.get(), src.size(), &dst[0], sizeof(dst), flags, NULL, &status)
: uidna_IDNToUnicode(src.get(), src.size(), &dst[0], sizeof(dst), flags, NULL, &status);
? uidna_IDNToASCII(src.get(), src.size(), &dst[0], kDstSize, flags, NULL, &status)
: uidna_IDNToUnicode(src.get(), src.size(), &dst[0], kDstSize, flags, NULL, &status);
#pragma GCC diagnostic pop
if (U_FAILURE(status)) {
jniThrowException(env, "java/lang/IllegalArgumentException", u_errorName(status));
return NULL;
......
......@@ -37,4 +37,15 @@ public class IDNTest extends TestCase {
String longInput = makePunyString(512);
assertEquals(longInput, IDN.toUnicode(longInput));
}
// http://b/30765246
public void testLongDomainName() {
String label63 = "123456789-123456789-123456789-123456789-123456789-123456789-123";
String host255 = label63 + "." + label63 + "." + label63 + "." + label63;
try {
IDN.toASCII(host255.substring(3) + ".com");
fail();
} catch (IllegalArgumentException expected) {
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment