From 594de165bf2f21d6b28eb17003ea78fc20c0ffed Mon Sep 17 00:00:00 2001
From: Furkan Onder <furkanonder@protonmail.com>
Date: Mon, 28 Nov 2022 09:49:10 +0300
Subject: [PATCH] gh-51524: Fix bug when calling trace.CoverageResults with
 valid infile (#99629)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
---
 Lib/test/test_trace.py                                 | 10 ++++++++++
 Lib/trace.py                                           |  2 +-
 .../2022-11-21-17-56-18.gh-issue-51524.nTykx8.rst      |  1 +
 3 files changed, 12 insertions(+), 1 deletion(-)
 create mode 100644 Misc/NEWS.d/next/Library/2022-11-21-17-56-18.gh-issue-51524.nTykx8.rst

diff --git a/Lib/test/test_trace.py b/Lib/test/test_trace.py
index 5f712111ca1..fad2b3b8379 100644
--- a/Lib/test/test_trace.py
+++ b/Lib/test/test_trace.py
@@ -1,4 +1,5 @@
 import os
+from pickle import dump
 import sys
 from test.support import captured_stdout
 from test.support.os_helper import (TESTFN, rmtree, unlink)
@@ -412,6 +413,15 @@ def test_issue9936(self):
         self.assertIn(modname, coverage)
         self.assertEqual(coverage[modname], (5, 100))
 
+    def test_coverageresults_update(self):
+        # Update empty CoverageResults with a non-empty infile.
+        infile = TESTFN + '-infile'
+        with open(infile, 'wb') as f:
+            dump(({}, {}, {'caller': 1}), f, protocol=1)
+        self.addCleanup(unlink, infile)
+        results = trace.CoverageResults({}, {}, infile, {})
+        self.assertEqual(results.callers, {'caller': 1})
+
 ### Tests that don't mess with sys.settrace and can be traced
 ### themselves TODO: Skip tests that do mess with sys.settrace when
 ### regrtest is invoked with -T option.
diff --git a/Lib/trace.py b/Lib/trace.py
index 2cf3643878d..213e46517d6 100755
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -172,7 +172,7 @@ def __init__(self, counts=None, calledfuncs=None, infile=None,
             try:
                 with open(self.infile, 'rb') as f:
                     counts, calledfuncs, callers = pickle.load(f)
-                self.update(self.__class__(counts, calledfuncs, callers))
+                self.update(self.__class__(counts, calledfuncs, callers=callers))
             except (OSError, EOFError, ValueError) as err:
                 print(("Skipping counts file %r: %s"
                                       % (self.infile, err)), file=sys.stderr)
diff --git a/Misc/NEWS.d/next/Library/2022-11-21-17-56-18.gh-issue-51524.nTykx8.rst b/Misc/NEWS.d/next/Library/2022-11-21-17-56-18.gh-issue-51524.nTykx8.rst
new file mode 100644
index 00000000000..63fe7b8a3a3
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-11-21-17-56-18.gh-issue-51524.nTykx8.rst
@@ -0,0 +1 @@
+Fix bug when calling trace.CoverageResults with valid infile.
-- 
GitLab