| Index: source/common/uts46.cpp
|
| diff --git a/source/common/uts46.cpp b/source/common/uts46.cpp
|
| index 8e6c8ff1e7d1b1fc035770580b14392b0baf7d8e..80900a019b42f2c9b18f105d631951a3e48caf97 100644
|
| --- a/source/common/uts46.cpp
|
| +++ b/source/common/uts46.cpp
|
| @@ -1,6 +1,6 @@
|
| /*
|
| *******************************************************************************
|
| -* Copyright (C) 2010-2012, International Business Machines
|
| +* Copyright (C) 2010-2014, International Business Machines
|
| * Corporation and others. All Rights Reserved.
|
| *******************************************************************************
|
| * file name: uts46.cpp
|
| @@ -27,8 +27,6 @@
|
| #include "ubidi_props.h"
|
| #include "ustr_imp.h"
|
|
|
| -#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
|
| -
|
| // Note about tests for UIDNA_ERROR_DOMAIN_NAME_TOO_LONG:
|
| //
|
| // The domain name length limit is 255 octets in an internal DNS representation
|
| @@ -321,9 +319,7 @@ UTS46::process(const UnicodeString &src,
|
| info.reset();
|
| int32_t srcLength=src.length();
|
| if(srcLength==0) {
|
| - if(toASCII) {
|
| - info.errors|=UIDNA_ERROR_EMPTY_LABEL;
|
| - }
|
| + info.errors|=UIDNA_ERROR_EMPTY_LABEL;
|
| return dest;
|
| }
|
| UChar *destArray=dest.getBuffer(srcLength);
|
| @@ -381,13 +377,11 @@ UTS46::process(const UnicodeString &src,
|
| ++i; // '.' was copied to dest already
|
| break;
|
| }
|
| - if(toASCII) {
|
| - // Permit an empty label at the end but not elsewhere.
|
| - if(i==labelStart && i<(srcLength-1)) {
|
| - info.labelErrors|=UIDNA_ERROR_EMPTY_LABEL;
|
| - } else if((i-labelStart)>63) {
|
| - info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG;
|
| - }
|
| + if(i==labelStart) {
|
| + info.labelErrors|=UIDNA_ERROR_EMPTY_LABEL;
|
| + }
|
| + if(toASCII && (i-labelStart)>63) {
|
| + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG;
|
| }
|
| info.errors|=info.labelErrors;
|
| info.labelErrors=0;
|
| @@ -423,9 +417,7 @@ UTS46::processUTF8(const StringPiece &src,
|
| // Arguments are fine, reset output values.
|
| info.reset();
|
| if(srcLength==0) {
|
| - if(toASCII) {
|
| - info.errors|=UIDNA_ERROR_EMPTY_LABEL;
|
| - }
|
| + info.errors|=UIDNA_ERROR_EMPTY_LABEL;
|
| dest.Flush();
|
| return;
|
| }
|
| @@ -436,7 +428,7 @@ UTS46::processUTF8(const StringPiece &src,
|
| char stackArray[256];
|
| int32_t destCapacity;
|
| char *destArray=dest.GetAppendBuffer(srcLength, srcLength+20,
|
| - stackArray, LENGTHOF(stackArray), &destCapacity);
|
| + stackArray, UPRV_LENGTHOF(stackArray), &destCapacity);
|
| UBool disallowNonLDHDot=(options&UIDNA_USE_STD3_RULES)!=0;
|
| int32_t i;
|
| for(i=0;; ++i) {
|
| @@ -483,13 +475,11 @@ UTS46::processUTF8(const StringPiece &src,
|
| if(isLabel) {
|
| break; // Replacing with U+FFFD can be complicated for toASCII.
|
| }
|
| - if(toASCII) {
|
| - // Permit an empty label at the end but not elsewhere.
|
| - if(i==labelStart && i<(srcLength-1)) {
|
| - info.labelErrors|=UIDNA_ERROR_EMPTY_LABEL;
|
| - } else if((i-labelStart)>63) {
|
| - info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG;
|
| - }
|
| + if(i==labelStart) {
|
| + info.labelErrors|=UIDNA_ERROR_EMPTY_LABEL;
|
| + }
|
| + if(toASCII && (i-labelStart)>63) {
|
| + info.labelErrors|=UIDNA_ERROR_LABEL_TOO_LONG;
|
| }
|
| info.errors|=info.labelErrors;
|
| info.labelErrors=0;
|
| @@ -748,9 +738,7 @@ UTS46::processLabel(UnicodeString &dest,
|
| }
|
| // Validity check
|
| if(labelLength==0) {
|
| - if(toASCII) {
|
| - info.labelErrors|=UIDNA_ERROR_EMPTY_LABEL;
|
| - }
|
| + info.labelErrors|=UIDNA_ERROR_EMPTY_LABEL;
|
| return replaceLabel(dest, destLabelStart, destLabelLength, *labelString, labelLength);
|
| }
|
| // labelLength>0
|
|
|