]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix SF bug #763023, difflib.py: ratio() zero division not caught
authorNeal Norwitz <nnorwitz@gmail.com>
Tue, 1 Jul 2003 15:12:33 +0000 (15:12 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Tue, 1 Jul 2003 15:12:33 +0000 (15:12 +0000)
Lib/difflib.py
Misc/NEWS

index 97ced5f88ee922ea7c098b68a756812e9848860b..ec9eb6c4e8ea14e5a7ced5561ad4411301a01029 100644 (file)
@@ -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.
index 2d83441d56e9e43d37f352c0fa06b85b3625f185..9ac0e11f3af6632caa89630e5b5411727a7b3cb4 100644 (file)
--- 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
 ====================================