From 078165e0889cb9962d4581095be470c9d275bc01 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 28 Feb 2020 22:38:12 +0100 Subject: [PATCH] bpo-38780: Harden socket use in logging.handlers Initialize self.socket to None in __init__(), and check for None before close() and emit(). --- Lib/logging/handlers.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py index 047798f6dc..c78acece11 100644 --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -828,6 +828,7 @@ class SysLogHandler(logging.Handler): self.address = address self.facility = facility + self.socket = None self.socktype = socktype if isinstance(address, str): @@ -908,7 +909,8 @@ class SysLogHandler(logging.Handler): """ self.acquire() try: - self.socket.close() + if self.socket: + self.socket.close() logging.Handler.close(self) finally: self.release() @@ -948,13 +950,16 @@ class SysLogHandler(logging.Handler): # Message is a string. Convert to bytes as required by RFC 5424 msg = msg.encode('utf-8') msg = prio + msg + if not self.socket: + return if self.unixsocket: try: self.socket.send(msg) except OSError: self.socket.close() self._connect_unixsocket(self.address) - self.socket.send(msg) + if self.socket: + self.socket.send(msg) elif self.socktype == socket.SOCK_DGRAM: self.socket.sendto(msg, self.address) else: -- 2.22.0