summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2003-07-01 15:12:33 +0000
committerNeal Norwitz <nnorwitz@gmail.com>2003-07-01 15:12:33 +0000
commit4e2badcd5e5d8158116cd314f737616a7f6dc5ca (patch)
tree6ae47fc2024a225d018dbabab26210b35179d4f9
parent8b9025b4c7c9a20b60f9bb3fa58419b3adae77a2 (diff)
downloadcpython-4e2badcd5e5d8158116cd314f737616a7f6dc5ca.tar.gz
Fix SF bug #763023, difflib.py: ratio() zero division not caught
-rw-r--r--Lib/difflib.py11
-rw-r--r--Misc/NEWS3
2 files changed, 11 insertions, 3 deletions
diff --git a/Lib/difflib.py b/Lib/difflib.py
index 97ced5f88e..ec9eb6c4e8 100644
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -24,6 +24,11 @@ Class Differ:
__all__ = ['get_close_matches', 'ndiff', 'restore', 'SequenceMatcher',
'Differ', 'IS_CHARACTER_JUNK', 'IS_LINE_JUNK']
+def _calculate_ratio(matches, length):
+ if length:
+ return 2.0 * matches / length
+ return 1.0
+
class SequenceMatcher:
"""
@@ -525,7 +530,7 @@ class SequenceMatcher:
matches = reduce(lambda sum, triple: sum + triple[-1],
self.get_matching_blocks(), 0)
- return 2.0 * matches / (len(self.a) + len(self.b))
+ return _calculate_ratio(matches, len(self.a) + len(self.b))
def quick_ratio(self):
"""Return an upper bound on ratio() relatively quickly.
@@ -554,7 +559,7 @@ class SequenceMatcher:
avail[elt] = numb - 1
if numb > 0:
matches = matches + 1
- return 2.0 * matches / (len(self.a) + len(self.b))
+ return _calculate_ratio(matches, len(self.a) + len(self.b))
def real_quick_ratio(self):
"""Return an upper bound on ratio() very quickly.
@@ -566,7 +571,7 @@ class SequenceMatcher:
la, lb = len(self.a), len(self.b)
# can't have more matches than the number of elements in the
# shorter sequence
- return 2.0 * min(la, lb) / (la + lb)
+ return _calculate_ratio(min(la, lb), la + lb)
def get_close_matches(word, possibilities, n=3, cutoff=0.6):
"""Use SequenceMatcher to return list of the best "good enough" matches.
diff --git a/Misc/NEWS b/Misc/NEWS
index 2d83441d56..9ac0e11f3a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -5,6 +5,9 @@ What's New in Python 2.2.4?
- SF #753592: webchecker/wsgui now handles user supplied directories.
+- SF bug 763023: fix uncaught ZeroDivisionError in difflib ratio methods
+ when there are no lines.
+
What's New in Python 2.2.3 (final) ?
Release date: 30-May-2003
====================================