diff options
author | Francisco Pimenta <fpimenta@google.com> | 2017-09-18 21:38:52 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-09-18 21:38:52 +0000 |
commit | 7a8a97dc9c755e8671effd2104cd9ae1797c4d36 (patch) | |
tree | f744d4c4f65a16ba26cbf31f3e2c66c84111f7bf /android/OldPhoneNumberUtils.cpp | |
parent | 63a0da9e48707d5832587615cc9a3a199bd3cea4 (diff) | |
parent | 5f46e583b40d86212e7f9c77492768c071a2aa7c (diff) |
Merge "Fix false positives comparing local and intl numbers"
Diffstat (limited to 'android/OldPhoneNumberUtils.cpp')
-rw-r--r-- | android/OldPhoneNumberUtils.cpp | 37 |
1 files changed, 6 insertions, 31 deletions
diff --git a/android/OldPhoneNumberUtils.cpp b/android/OldPhoneNumberUtils.cpp index 9c2f20e..9846a1c 100644 --- a/android/OldPhoneNumberUtils.cpp +++ b/android/OldPhoneNumberUtils.cpp @@ -154,33 +154,6 @@ static bool matchIntlPrefixAndCC(const char* a, int len) return state == 6 || state == 7 || state == 8; } -/** or -1 if both are negative */ -static int minPositive(int a, int b) -{ - if (a >= 0 && b >= 0) { - return (a < b) ? a : b; - } else if (a >= 0) { /* && b < 0 */ - return a; - } else if (b >= 0) { /* && a < 0 */ - return b; - } else { /* a < 0 && b < 0 */ - return -1; - } -} - -/** - * Return the offset into a of the first appearance of b, or -1 if there - * is no such character in a. - */ -static int indexOf(const char *a, char b) { - const char *ix = strchr(a, b); - - if (ix == NULL) - return -1; - else - return ix - a; -} - /** * Compare phone numbers a and b, return true if they're identical * enough for caller ID purposes. @@ -270,15 +243,15 @@ bool phone_number_compare_loose(const char* a, const char* b) * (for this, a '0' and a '00' prefix would have succeeded above) */ - if (matchIntlPrefix(a, ia + 1) && matchIntlPrefix(b, ib +1)) { + if (matchIntlPrefix(a, ia + 1) && matchIntlPrefix(b, ib + 1)) { return true; } - if (matchTrunkPrefix(a, ia + 1) && matchIntlPrefixAndCC(b, ib +1)) { + if (matchTrunkPrefix(a, ia + 1) && matchIntlPrefixAndCC(b, ib + 1)) { return true; } - if (matchTrunkPrefix(b, ib + 1) && matchIntlPrefixAndCC(a, ia +1)) { + if (matchTrunkPrefix(b, ib + 1) && matchIntlPrefixAndCC(a, ia + 1)) { return true; } @@ -292,7 +265,9 @@ bool phone_number_compare_loose(const char* a, const char* b) */ bool aPlusFirst = (*a == '+'); bool bPlusFirst = (*b == '+'); - if (ia < 4 && ib < 4 && (aPlusFirst || bPlusFirst) && !(aPlusFirst && bPlusFirst)) { + bool aIgnoreUnmatched = aPlusFirst && (ia - ib) >= 0 && (ia - ib) <= 1; + bool bIgnoreUnmatched = bPlusFirst && (ib - ia) >= 0 && (ib - ia) <= 1; + if (ia < 4 && ib < 4 && (aIgnoreUnmatched || bIgnoreUnmatched) && !(aPlusFirst && bPlusFirst)) { return true; } |