Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cfaf8a1e authored by Torne (Richard Coles)'s avatar Torne (Richard Coles)
Browse files

Only match addresses without zip codes if at the end.

The old native implementation of findAddress only accepted addresses
without zip codes if they appeared at the end of the string. This was
probably a bug as the documentation implies this should work in all
cases, but fixing this bug has caused a lot of false positives while not
fixing very many false negatives and this functionality is being
deprecated anyway, so change it back.

Fixes: 75409267
Test: tested upstream in chromium; direct copy of that code
Change-Id: I3f3c300035cf02a23284737431bc6f94f542cbe7
parent e7154b6d
Loading
Loading
Loading
Loading
+14 −13
Original line number Diff line number Diff line
@@ -429,23 +429,24 @@ class FindAddress {

                    // At this point we've matched a state; try to match a zip code after it.
                    Matcher zipMatcher = sWordRe.matcher(content);
                    if (zipMatcher.find(stateMatch.end())
                            && isValidZipCode(zipMatcher.group(0), stateMatch)) {
                    if (zipMatcher.find(stateMatch.end())) {
                        if (isValidZipCode(zipMatcher.group(0), stateMatch)) {
                            return zipMatcher.end();
                        }
                    } else {
                        // The content ends with a state but no zip
                        // code. This is a legal match according to the
                    // documentation. N.B. This differs from the
                        // documentation. N.B. This is equivalent to the
                        // original c++ implementation, which only allowed
                        // the zip code to be optional at the end of the
                    // string, which presumably is a bug.  Now we
                    // prefer to find a match with a zip code, but
                    // remember non-zip matches and return them if
                    // necessary.
                        // string, which presumably is a bug.  We tried
                        // relaxing this to work in other places but it
                        // caused too many false positives.
                        nonZipMatch = stateMatch.end();
                    }
                }
            }
        }

        if (nonZipMatch > 0) return nonZipMatch;