From aa4f98a76505e1378fee5ccf802abcaedd9247c3 Mon Sep 17 00:00:00 2001 From: Jeaeun Kim <109906379+kyokuping@users.noreply.github.com> Date: Sun, 2 Aug 2026 00:25:43 +0900 Subject: [PATCH] fix(socket): use object repr in deallocation warnings (#8422) Assisted-by: Codex:gpt-5.6-sol --- Lib/test/test_ssl.py | 1 - crates/stdlib/src/socket.rs | 22 +++++----------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 5b0c90e4d..107aec7e6 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -754,7 +754,6 @@ class BasicSocketTests(unittest.TestCase): with test_wrap_socket(s, server_side=True, certfile=CERTFILE) as ss: self.assertIsNone(ss.get_channel_binding("tls-unique")) - @unittest.expectedFailure # TODO: RUSTPYTHON; AssertionError: "" not found in "unclosed " def test_dealloc_warn(self): ss = test_wrap_socket(socket.socket(socket.AF_INET)) r = repr(ss) diff --git a/crates/stdlib/src/socket.rs b/crates/stdlib/src/socket.rs index 968399ca7..4f85374b1 100644 --- a/crates/stdlib/src/socket.rs +++ b/crates/stdlib/src/socket.rs @@ -1378,23 +1378,11 @@ mod _socket { fn del(zelf: &Py, vm: &VirtualMachine) -> PyResult<()> { // Emit ResourceWarning if socket is still open if zelf.sock.read().is_some() { - let laddr = if let Ok(sock) = zelf.sock() - && let Ok(addr) = sock.local_addr() - && let Ok(repr) = get_addr_tuple(&addr, vm).repr(vm) - { - format!(", laddr={}", repr.as_wtf8()) - } else { - String::new() - }; - - let msg = format!( - "unclosed ", - zelf.fileno(), - zelf.family.load(), - zelf.kind.load(), - zelf.proto.load(), - laddr - ); + let repr = zelf + .as_object() + .repr(vm) + .unwrap_or_else(|_| vm.ctx.new_str("")); + let msg = format!("unclosed {}", repr.as_wtf8()); let _ = crate::vm::warn::warn( vm.ctx.new_str(msg).into(), Some(vm.ctx.exceptions.resource_warning.to_owned()),