]> granicus.if.org Git - python/commitdiff
Closes #14436: Convert msg + args to string before pickling.
authorVinay Sajip <vinay_sajip@yahoo.co.uk>
Thu, 29 Mar 2012 19:11:20 +0000 (20:11 +0100)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Thu, 29 Mar 2012 19:11:20 +0000 (20:11 +0100)
Lib/logging/handlers.py

index 3ff324d1436bc8869ef7cb9a56fbf60e55a7fea2..6bbc1f71b6ee7309cbf1318a0130e5e7a7236bf7 100644 (file)
@@ -528,9 +528,16 @@ class SocketHandler(logging.Handler):
         """
         ei = record.exc_info
         if ei:
-            dummy = self.format(record) # just to get traceback text into record.exc_text
+            # just to get traceback text into record.exc_text ...
+            dummy = self.format(record)
             record.exc_info = None  # to avoid Unpickleable error
-        s = cPickle.dumps(record.__dict__, 1)
+        # See issue #14436: If msg or args are objects, they may not be
+        # available on the receiving end. So we convert the msg % args
+        # to a string, save it as msg and zap the args.
+        d = dict(record.__dict__)
+        d['msg'] = record.getMessage()
+        d['args'] = None
+        s = cPickle.dumps(d, 1)
         if ei:
             record.exc_info = ei  # for next handler
         slen = struct.pack(">L", len(s))