bpo-42739: Don't use sentinels to mark end of line table. (GH-25657)

* Add length parameter to PyLineTable_InitAddressRange and doen't use sentinel values at end of table. Makes the line number table more robust.

* Update PyCodeAddressRange to match PEP 626.
diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py
index 467e8e5..6aaf04c 100644
--- a/Lib/test/test_code.py
+++ b/Lib/test/test_code.py
@@ -264,6 +264,12 @@ def func2():
                 new_code = code.replace(**{attr: value})
                 self.assertEqual(getattr(new_code, attr), value)
 
+    def test_empty_linetable(self):
+        def func():
+            pass
+        new_code = code = func.__code__.replace(co_linetable=b'')
+        self.assertEqual(list(new_code.co_lines()), [])
+
 
 def isinterned(s):
     return s is sys.intern(('_' + s + '_')[1:-1])
diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py
index 8e36ae2..8d05935 100644
--- a/Lib/test/test_dis.py
+++ b/Lib/test/test_dis.py
@@ -172,7 +172,7 @@ def bug42562():
 
 
 # Set line number for 'pass' to None
-bug42562.__code__ = bug42562.__code__.replace(co_linetable=b'\x04\x80\xff\x80')
+bug42562.__code__ = bug42562.__code__.replace(co_linetable=b'\x04\x80')
 
 
 dis_bug42562 = """\