diff options
author | Shaopeng Jia <shaopengjia@google.com> | 2012-03-28 17:07:14 +0200 |
---|---|---|
committer | Shaopeng Jia <shaopengjia@google.com> | 2012-04-02 12:58:48 +0200 |
commit | b0e21c22b1ca6b9aeb1426924cdf42a221c3d416 (patch) | |
tree | 9415b763d9aa8962d42f3ea2132c504019835959 | |
parent | cc0ae7326023c5da91dd9a84035c3dc3f6cc372f (diff) | |
download | libphonenumber-jb-dev.tar.gz |
Upgrade libphonenumber to v4.7android-cts-4.1_r4android-cts-4.1_r2android-cts-4.1_r1android-4.1.2_r2.1android-4.1.2_r2android-4.1.2_r1android-4.1.1_r6.1android-4.1.1_r6android-4.1.1_r5android-4.1.1_r4android-4.1.1_r3android-4.1.1_r2android-4.1.1_r1.1android-4.1.1_r1jb-releasejb-mr0-releasejb-dev
Change-Id: Ia10e96d76b830f264b51431700a2edee99def6ea
52 files changed, 139 insertions, 73 deletions
diff --git a/README.android b/README.android index e84d1726..67485b0e 100644 --- a/README.android +++ b/README.android @@ -1,5 +1,5 @@ URL: http://code.google.com/p/libphonenumber/ -Version: 4.6 (r429) +Version: 4.7 (r436) License: Apache 2 Description: Google Phone Number Library. Local Modification: diff --git a/java/release_notes.txt b/java/release_notes.txt index 5970332a..ecfdd28e 100644 --- a/java/release_notes.txt +++ b/java/release_notes.txt @@ -1,3 +1,12 @@ +March 16th, 2012: libphonenumber-4.7 +* Bug fixes + - Now return "too long" for input that is longer than 250 chars when parsing +* Metadata changes + - AC,AM,AT,AZ,BF,BR,BY,BZ,CR,CU,DE,DJ,EE,EG,ET,GA,GH,HK,HN,ID,IN,JP,KE,KG,KH,KR,KW,KY,LB,LU,MA,MD, + MK,NA,NE,NZ,SA,SB,SC,SE,SL,SN,UZ + * Refactoring of test classes so that tests requiring the test metadata to be loaded have a common + base class which handles this. + February 9th, 2012: libphonenumber-4.6 * Bug fixes - Fix for formatByPattern to enable RFC formatting to work diff --git a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java index 5120aabc..4e3fbc35 100644 --- a/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java +++ b/java/src/com/android/i18n/phonenumbers/PhoneNumberUtil.java @@ -63,6 +63,9 @@ public class PhoneNumberUtil { static final int MAX_LENGTH_FOR_NSN = 16; // The maximum length of the country calling code. static final int MAX_LENGTH_COUNTRY_CODE = 3; + // We don't allow input strings for parsing to be longer than 250 chars. This prevents malicious + // input from overflowing the regular-expression engine. + private static final int MAX_INPUT_STRING_LENGTH = 250; static final String META_DATA_FILE_PREFIX = "/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto"; private String currentFilePrefix = META_DATA_FILE_PREFIX; @@ -261,7 +264,7 @@ public class PhoneNumberUtil { // plus_sign*(([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])* // Note VALID_PUNCTUATION starts with a -, so must be the first in the range. private static final String VALID_PHONE_NUMBER = - "[" + PLUS_CHARS + "]*(?:[" + VALID_PUNCTUATION + STAR_SIGN + "]*" + DIGITS + "){3,}[" + + "[" + PLUS_CHARS + "]*+(?:[" + VALID_PUNCTUATION + STAR_SIGN + "]*" + DIGITS + "){3,}[" + VALID_PUNCTUATION + STAR_SIGN + VALID_ALPHA + DIGITS + "]*"; // Default extension prefix to use when formatting. This will be put in front of any extension @@ -356,9 +359,10 @@ public class PhoneNumberUtil { * INTERNATIONAL and NATIONAL formats are consistent with the definition in ITU-T Recommendation * E123. For example, the number of the Google Switzerland office will be written as * "+41 44 668 1800" in INTERNATIONAL format, and as "044 668 1800" in NATIONAL format. - * E164 format is as per INTERNATIONAL format but with no formatting applied, e.g. +41446681800. - * RFC3966 is as per INTERNATIONAL format, but with all spaces and other separating symbols - * replaced with a hyphen, and with any phone number extension appended with ";ext=". + * E164 format is as per INTERNATIONAL format but with no formatting applied, e.g. + * "+41446681800". RFC3966 is as per INTERNATIONAL format, but with all spaces and other + * separating symbols replaced with a hyphen, and with any phone number extension appended with + * ";ext=". It also will have a prefix of "tel:" added, e.g. "tel:+41-44-668-1800". * * Note: If you are considering storing the number in a neutral format, you are highly advised to * use the PhoneNumber class. @@ -647,13 +651,13 @@ public class PhoneNumberUtil { // We assume that the first-group symbol will never be _before_ the national prefix. candidateNationalPrefixRule = candidateNationalPrefixRule.substring(0, candidateNationalPrefixRule.indexOf("$1")); - candidateNationalPrefixRule = util.normalizeDigitsOnly(candidateNationalPrefixRule); + candidateNationalPrefixRule = normalizeDigitsOnly(candidateNationalPrefixRule); if (candidateNationalPrefixRule.length() == 0) { // National Prefix not needed for this number. return true; } // Normalize the remainder. - String rawInputCopy = util.normalizeDigitsOnly(number.getRawInput()); + String rawInputCopy = normalizeDigitsOnly(number.getRawInput()); StringBuilder rawInput = new StringBuilder(rawInputCopy); // Check if we found a national prefix and/or carrier code at the start of the raw input, // and return the result. @@ -1623,9 +1627,13 @@ public class PhoneNumberUtil { } else { // Invalid region entered as country-calling-from (so no metadata was found for it) or the // region chosen has multiple international dialling prefixes. + LOGGER.log(Level.WARNING, + "Trying to format number from invalid region " + + regionCallingFrom + + ". International formatting applied."); prefixNumberWithCountryCallingCode(countryCode, - PhoneNumberFormat.INTERNATIONAL, - formattedNumber); + PhoneNumberFormat.INTERNATIONAL, + formattedNumber); } return formattedNumber.toString(); } @@ -1658,7 +1666,8 @@ public class PhoneNumberUtil { formattedNumber.insert(0, " ").insert(0, countryCallingCode).insert(0, PLUS_SIGN); return; case RFC3966: - formattedNumber.insert(0, "-").insert(0, countryCallingCode).insert(0, PLUS_SIGN); + formattedNumber.insert(0, "-").insert(0, countryCallingCode).insert(0, PLUS_SIGN) + .insert(0, "tel:"); return; case NATIONAL: default: @@ -2737,6 +2746,9 @@ public class PhoneNumberUtil { if (numberToParse == null) { throw new NumberParseException(NumberParseException.ErrorType.NOT_A_NUMBER, "The phone number supplied was null."); + } else if (numberToParse.length() > MAX_INPUT_STRING_LENGTH) { + throw new NumberParseException(NumberParseException.ErrorType.TOO_LONG, + "The string supplied was too long to parse."); } // Extract a possible number from the string passed in (this strips leading characters that // could not be the start of a phone number.) diff --git a/java/src/com/android/i18n/phonenumbers/ShortNumberUtil.java b/java/src/com/android/i18n/phonenumbers/ShortNumberUtil.java index 951164d3..3f47e7db 100644 --- a/java/src/com/android/i18n/phonenumbers/ShortNumberUtil.java +++ b/java/src/com/android/i18n/phonenumbers/ShortNumberUtil.java @@ -17,7 +17,6 @@ package com.android.i18n.phonenumbers; import com.android.i18n.phonenumbers.Phonemetadata.PhoneMetadata; -import com.android.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc; import java.util.regex.Pattern; diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC Binary files differindex fbb7a914..52de7be7 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM Binary files differindex c6a51446..54618677 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT Binary files differindex 35684449..751674c4 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ Binary files differindex 75b798b7..34d4f940 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF Binary files differindex 802997ee..ad53ba8d 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR Binary files differindex 31ed9bc7..96d2ae4e 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY Binary files differindex 284b3b32..a78037b1 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ Binary files differindex b1f0a883..0b04b15a 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR Binary files differindex 307c8abf..de374d10 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU Binary files differindex ec56f92e..4ff33513 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE Binary files differindex 673ba16f..9163e1b0 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ Binary files differindex 0683a643..68133054 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE Binary files differindex 89ecb6ec..5b832761 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG Binary files differindex e8278168..463aaa69 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET Binary files differindex b3bde004..15e0c7d7 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA Binary files differindex 438299c6..fb204d08 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH Binary files differindex aa6e8e77..e268fcca 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK Binary files differindex 9e5fa06a..0b3561a8 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN Binary files differindex 9339afbc..c6dfaf92 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID Binary files differindex 5c45880c..fc2cd499 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN Binary files differindex f07407af..6f1ad283 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP Binary files differindex eaae271c..e4032ead 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE Binary files differindex 197ff1ed..a7c91d43 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG Binary files differindex 9384fb9a..f71f076d 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH Binary files differindex 3c8e5bd6..9e97693e 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR Binary files differindex d8344af8..894849e8 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW Binary files differindex adb7f31e..cf386eea 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY Binary files differindex cacfd5fa..dc864dda 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB Binary files differindex 255bc5f7..6b2dba9c 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU Binary files differindex c4951ef9..f80d8279 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA Binary files differindex 2850cab1..bf444b7f 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD Binary files differindex 565dc363..3002dfb7 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK Binary files differindex 010e1269..5dcd3849 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA Binary files differindex 2ee1fa96..3bcfaa80 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE Binary files differindex 096e0496..e9d67f42 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ Binary files differindex 1c8cb636..d67fad0c 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA Binary files differindex b4f4e3b2..fd3ed6b4 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB Binary files differindex a5ea1793..605df51a 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC Binary files differindex 7f55e5ae..a9ca75a9 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE Binary files differindex a023e7b2..e52ec10f 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL Binary files differindex d059d665..8f731820 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN Binary files differindex 3f9e5671..0350bb98 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN diff --git a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ Binary files differindex 18262d29..aedaccee 100644 --- a/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ +++ b/java/src/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ diff --git a/java/test/com/android/i18n/phonenumbers/AsYouTypeFormatterTest.java b/java/test/com/android/i18n/phonenumbers/AsYouTypeFormatterTest.java index aa11a63b..e572fe04 100644 --- a/java/test/com/android/i18n/phonenumbers/AsYouTypeFormatterTest.java +++ b/java/test/com/android/i18n/phonenumbers/AsYouTypeFormatterTest.java @@ -16,23 +16,15 @@ package com.android.i18n.phonenumbers; -import junit.framework.TestCase; - /** * Unit tests for AsYouTypeFormatter.java * - * Note that these tests use the metadata contained in the files with TEST_META_DATA_FILE_PREFIX, - * not the normal metadata files, so should not be used for regression test purposes - these tests - * are illustrative only and test functionality. + * Note that these tests use the test metadata, not the normal metadata file, so should not be used + * for regression test purposes - these tests are illustrative only and test functionality. * * @author Shaopeng Jia */ -public class AsYouTypeFormatterTest extends TestCase { - private PhoneNumberUtil phoneUtil; - - public AsYouTypeFormatterTest() { - phoneUtil = PhoneNumberUtilTest.initializePhoneUtilForTesting(); - } +public class AsYouTypeFormatterTest extends TestMetadataTestCase { public void testInvalidRegion() { AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter(RegionCode.ZZ); diff --git a/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java b/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java index dea226d4..82ea8302 100644 --- a/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java +++ b/java/test/com/android/i18n/phonenumbers/PhoneNumberMatcherTest.java @@ -19,8 +19,6 @@ package com.android.i18n.phonenumbers; import com.android.i18n.phonenumbers.PhoneNumberUtil.Leniency; import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber; -import junit.framework.TestCase; - import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -33,13 +31,7 @@ import java.util.NoSuchElementException; * @author Tom Hofmann * @see PhoneNumberUtilTest {@link PhoneNumberUtilTest} for the origin of the test data */ -public class PhoneNumberMatcherTest extends TestCase { - private PhoneNumberUtil phoneUtil; - - @Override - protected void setUp() throws Exception { - phoneUtil = PhoneNumberUtilTest.initializePhoneUtilForTesting(); - } +public class PhoneNumberMatcherTest extends TestMetadataTestCase { /** See {@link PhoneNumberUtilTest#testParseNationalNumber()}. */ public void testFindNationalNumber() throws Exception { @@ -710,6 +702,19 @@ public class PhoneNumberMatcherTest extends TestCase { assertEquals(expected, actual); } + public void testNonPlusPrefixedNumbersNotFoundForInvalidRegion() throws Exception { + // Does not start with a "+", we won't match it. + Iterable<PhoneNumberMatch> iterable = phoneUtil.findNumbers("1 456 764 156", RegionCode.ZZ); + Iterator<PhoneNumberMatch> iterator = iterable.iterator(); + + assertFalse(iterator.hasNext()); + try { + iterator.next(); + fail("Violation of the Iterator contract."); + } catch (NoSuchElementException e) { /* Success */ } + assertFalse(iterator.hasNext()); + } + public void testEmptyIteration() throws Exception { Iterable<PhoneNumberMatch> iterable = phoneUtil.findNumbers("", RegionCode.ZZ); Iterator<PhoneNumberMatch> iterator = iterable.iterator(); diff --git a/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java index 00718bb7..83e5da70 100644 --- a/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java +++ b/java/test/com/android/i18n/phonenumbers/PhoneNumberUtilTest.java @@ -23,27 +23,19 @@ import com.android.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc; import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber; import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource; -import junit.framework.TestCase; - import java.util.ArrayList; import java.util.List; /** * Unit tests for PhoneNumberUtil.java * - * Note that these tests use the metadata contained in the files with TEST_META_DATA_FILE_PREFIX, - * not the normal metadata files, so should not be used for regression test purposes - these tests - * are illustrative only and test functionality. + * Note that these tests use the test metadata, not the normal metadata file, so should not be used + * for regression test purposes - these tests are illustrative only and test functionality. * * @author Shaopeng Jia * @author Lara Rennie */ -public class PhoneNumberUtilTest extends TestCase { - private PhoneNumberUtil phoneUtil; - // This is used by BuildMetadataProtoFromXml. - static final String TEST_META_DATA_FILE_PREFIX = - "/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting"; - +public class PhoneNumberUtilTest extends TestMetadataTestCase { // Set up some test numbers to re-use. private static final PhoneNumber ALPHA_NUMERIC_NUMBER = new PhoneNumber().setCountryCode(1).setNationalNumber(80074935247L); @@ -110,17 +102,6 @@ public class PhoneNumberUtilTest extends TestCase { private static final PhoneNumber INTERNATIONAL_TOLL_FREE_TOO_LONG = new PhoneNumber().setCountryCode(800).setNationalNumber(1234567890L); - public PhoneNumberUtilTest() { - phoneUtil = initializePhoneUtilForTesting(); - } - - static PhoneNumberUtil initializePhoneUtilForTesting() { - PhoneNumberUtil.resetInstance(); - return PhoneNumberUtil.getInstance( - TEST_META_DATA_FILE_PREFIX, - CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap()); - } - public void testGetSupportedRegions() { assertTrue(phoneUtil.getSupportedRegions().size() > 0); } @@ -358,7 +339,7 @@ public class PhoneNumberUtilTest extends TestCase { assertEquals("900 253 0000", phoneUtil.format(US_PREMIUM, PhoneNumberFormat.NATIONAL)); assertEquals("+1 900 253 0000", phoneUtil.format(US_PREMIUM, PhoneNumberFormat.INTERNATIONAL)); - assertEquals("+1-900-253-0000", phoneUtil.format(US_PREMIUM, PhoneNumberFormat.RFC3966)); + assertEquals("tel:+1-900-253-0000", phoneUtil.format(US_PREMIUM, PhoneNumberFormat.RFC3966)); // Numbers with all zeros in the national number part will be formatted by using the raw_input // if that is available no matter which format is specified. assertEquals("000-000-0000", @@ -384,7 +365,7 @@ public class PhoneNumberUtilTest extends TestCase { deNumber.setCountryCode(49).setNationalNumber(301234L); assertEquals("030/1234", phoneUtil.format(deNumber, PhoneNumberFormat.NATIONAL)); assertEquals("+49 30/1234", phoneUtil.format(deNumber, PhoneNumberFormat.INTERNATIONAL)); - assertEquals("+49-30-1234", phoneUtil.format(deNumber, PhoneNumberFormat.RFC3966)); + assertEquals("tel:+49-30-1234", phoneUtil.format(deNumber, PhoneNumberFormat.RFC3966)); deNumber.clear(); deNumber.setCountryCode(49).setNationalNumber(291123L); @@ -709,9 +690,9 @@ public class PhoneNumberUtilTest extends TestCase { assertEquals("+1 (650) 253-0000", phoneUtil.formatByPattern(US_NUMBER, PhoneNumberFormat.INTERNATIONAL, newNumberFormats)); - assertEquals("+1-650-253-0000", phoneUtil.formatByPattern(US_NUMBER, - PhoneNumberFormat.RFC3966, - newNumberFormats)); + assertEquals("tel:+1-650-253-0000", phoneUtil.formatByPattern(US_NUMBER, + PhoneNumberFormat.RFC3966, + newNumberFormats)); // $NP is set to '1' for the US. Here we check that for other NANPA countries the US rules are // followed. @@ -769,7 +750,8 @@ public class PhoneNumberUtilTest extends TestCase { // Uses default extension prefix: assertEquals("03-331 6005 ext. 1234", phoneUtil.format(nzNumber, PhoneNumberFormat.NATIONAL)); // Uses RFC 3966 syntax. - assertEquals("+64-3-331-6005;ext=1234", phoneUtil.format(nzNumber, PhoneNumberFormat.RFC3966)); + assertEquals("tel:+64-3-331-6005;ext=1234", + phoneUtil.format(nzNumber, PhoneNumberFormat.RFC3966)); // Extension prefix overridden in the territory information for the US: PhoneNumber usNumberWithExtension = new PhoneNumber().mergeFrom(US_NUMBER).setExtension("4567"); assertEquals("650 253 0000 extn. 4567", phoneUtil.format(usNumberWithExtension, @@ -1036,11 +1018,9 @@ public class PhoneNumberUtilTest extends TestCase { // Invalid country calling codes. invalidNumber.setCountryCode(3923).setNationalNumber(2366L); assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.ZZ)); - invalidNumber.setCountryCode(3923).setNationalNumber(2366L); - assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.UN001)); - invalidNumber.setCountryCode(0).setNationalNumber(2366L); assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.UN001)); invalidNumber.setCountryCode(0); + assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.UN001)); assertFalse(phoneUtil.isValidNumberForRegion(invalidNumber, RegionCode.ZZ)); } @@ -1594,6 +1574,38 @@ public class PhoneNumberUtilTest extends TestCase { assertEquals(premiumNumber, phoneUtil.parse("0900 a332 600A5", RegionCode.NZ)); } + public void testParseMaliciousInput() throws Exception { + // Lots of leading + signs before the possible number. + StringBuilder maliciousNumber = new StringBuilder(6000); + for (int i = 0; i < 6000; i++) { + maliciousNumber.append('+'); + } + maliciousNumber.append("12222-33-244 extensioB 343+"); + try { + phoneUtil.parse(maliciousNumber.toString(), RegionCode.US); + fail("This should not parse without throwing an exception " + maliciousNumber); + } catch (NumberParseException e) { + // Expected this exception. + assertEquals("Wrong error type stored in exception.", + NumberParseException.ErrorType.TOO_LONG, + e.getErrorType()); + } + StringBuilder maliciousNumberWithAlmostExt = new StringBuilder(6000); + for (int i = 0; i < 350; i++) { + maliciousNumberWithAlmostExt.append("200"); + } + maliciousNumberWithAlmostExt.append(" extensiOB 345"); + try { + phoneUtil.parse(maliciousNumberWithAlmostExt.toString(), RegionCode.US); + fail("This should not parse without throwing an exception " + maliciousNumberWithAlmostExt); + } catch (NumberParseException e) { + // Expected this exception. + assertEquals("Wrong error type stored in exception.", + NumberParseException.ErrorType.TOO_LONG, + e.getErrorType()); + } + } + public void testParseWithInternationalPrefixes() throws Exception { assertEquals(US_NUMBER, phoneUtil.parse("+1 (650) 253-0000", RegionCode.NZ)); assertEquals(INTERNATIONAL_TOLL_FREE, phoneUtil.parse("011 800 1234 5678", RegionCode.US)); diff --git a/java/test/com/android/i18n/phonenumbers/ShortNumberUtilTest.java b/java/test/com/android/i18n/phonenumbers/ShortNumberUtilTest.java index b1aaade6..99858af6 100644 --- a/java/test/com/android/i18n/phonenumbers/ShortNumberUtilTest.java +++ b/java/test/com/android/i18n/phonenumbers/ShortNumberUtilTest.java @@ -16,25 +16,15 @@ package com.android.i18n.phonenumbers; -import junit.framework.TestCase; - -import java.io.InputStream; - /** * Unit tests for ShortNumberUtil.java * * @author Shaopeng Jia */ -public class ShortNumberUtilTest extends TestCase { +public class ShortNumberUtilTest extends TestMetadataTestCase { private ShortNumberUtil shortUtil; - static final String TEST_META_DATA_FILE_PREFIX = - "/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting"; public ShortNumberUtilTest() { - PhoneNumberUtil.resetInstance(); - PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance( - TEST_META_DATA_FILE_PREFIX, - CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap()); shortUtil = new ShortNumberUtil(phoneUtil); } diff --git a/java/test/com/android/i18n/phonenumbers/TestMetadataTestCase.java b/java/test/com/android/i18n/phonenumbers/TestMetadataTestCase.java new file mode 100644 index 00000000..f4a40d7d --- /dev/null +++ b/java/test/com/android/i18n/phonenumbers/TestMetadataTestCase.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2012 The Libphonenumber Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.i18n.phonenumbers; + +import junit.framework.TestCase; + +/** + * Root class for PhoneNumberUtil tests that depend on the test metadata file. + * <p> + * Note since tests that extend this class do not use the normal metadata file, they should not be + * used for regression test purposes. + * + * @author Shaopeng Jia + * @author Lara Rennie + */ +public class TestMetadataTestCase extends TestCase { + private static final String TEST_META_DATA_FILE_PREFIX = + "/com/android/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting"; + + protected final PhoneNumberUtil phoneUtil; + + public TestMetadataTestCase() { + phoneUtil = initializePhoneUtilForTesting(); + } + + static PhoneNumberUtil initializePhoneUtilForTesting() { + PhoneNumberUtil.resetInstance(); + PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance( + TEST_META_DATA_FILE_PREFIX, + CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap()); + return phoneUtil; + } +} |