SequenceMatcher(None, [], []).get_grouped_opcodes() now returns a generator
that behaves as if both lists has an empty string in each of them.

Closes bug #979794 (and duplicate bug #980117).
diff --git a/Lib/difflib.py b/Lib/difflib.py
index 529c786..e82c703 100644
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -572,6 +572,8 @@
         """
 
         codes = self.get_opcodes()
+        if not codes:
+            codes = [("equal", 0, 1, 0, 1)]
         # Fixup leading and trailing groups if they show no changes.
         if codes[0][0] == 'equal':
             tag, i1, i2, j1, j2 = codes[0]
diff --git a/Lib/test/test_difflib.py b/Lib/test/test_difflib.py
index 1703754..9819c84 100644
--- a/Lib/test/test_difflib.py
+++ b/Lib/test/test_difflib.py
@@ -12,6 +12,13 @@
         self.assertEqual(s.quick_ratio(), 1)
         self.assertEqual(s.real_quick_ratio(), 1)
 
+    def test_comparing_empty_lists(self):
+        # Check fix for bug #979794
+        group_gen = difflib.SequenceMatcher(None, [], []).get_grouped_opcodes()
+        self.assertRaises(StopIteration, group_gen.next)
+        diff_gen = difflib.unified_diff([], [])
+        self.assertRaises(StopIteration, diff_gen.next)
+
 Doctests = doctest.DocTestSuite(difflib)
 
 test_support.run_unittest(TestSFbugs, Doctests)
diff --git a/Misc/NEWS b/Misc/NEWS
index 73abaa4..507c7a5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -29,6 +29,10 @@
 Library
 -------
 
+- Bug #979794: difflib.get_grouped_opcodes() now handles the case of when it is
+  comparing two empty lists.  Was affecting both context_diff() and
+  unified_diff().  Was also a duplicate of bug #980117.
+
 - Bug #980938: smtplib now prints debug output to sys.stderr.
 
 - Bug #930024: posixpath.realpath() now handles infinite loops in symlinks by