btw: I wonder why:

random.randint(1000, <maxint>)

and not

random.randint(0, <maxint>)

Anyone? James? What does Gaim/Pidgin/libpurple do?

On 5/28/07, Alexander Tsvyashchenko <[EMAIL PROTECTED]> wrote:


Hello All,

It looks like pymsn-t 0.11.2 contains the code that breaks avatars
support on x86_64 systems.

More specifically, when generating session IDs, it uses calls like
random.randint(1000, sys.maxint) - but the issue is that sys.maxint
returns 64 bit integers, while MSN protocol, as far as I understood,
uses 32 bit ones - thus, slicing occurs and session ID in packets does
not match stored session ID - so packets are silently discarded.

I've spent more than 4 hours to debug that, but I hope it was not in
vain and can help smb besides me ;-)

My (quick-and-dirty) patch is below, it solved the problem on my PC.

I was not really sure what maxint places were safe and what were not,
so I've replaced all of them to be sure. The place where it is
certainly required is msn.py: 2713

==========================================================================
diff -urN pymsnt-0.11.2/src/ft.py pymsnt-0.11.2.patched/src/ft.py
--- pymsnt-0.11.2/src/ft.py     2006-10-18 07:40:55.000000000 +0300
+++ pymsnt-0.11.2.patched/src/ft.py     2007-05-28 13:17:18.000000000+0300
@@ -14,6 +14,8 @@
  import random
  import sys

+SYS_MAXINT = 2147483647
+

  def doRateLimit(setConsumer, consumer):
        try:
@@ -208,7 +210,7 @@
                        del self.legacyftp

                LogEvent(INFO, self.ident)
-               self.sid = str(random.randint(1000, sys.maxint))
+               self.sid = str(random.randint(1000, SYS_MAXINT))
                iq = Element((None, "iq"))
                iq.attributes["type"] = "set"
                iq.attributes["to"] = self.toJID
diff -urN pymsnt-0.11.2/src/legacy/msn/msn.py
pymsnt-0.11.2.patched/src/legacy/msn/msn.py
--- pymsnt-0.11.2/src/legacy/msn/msn.py 2006-10-18 07:40:54.000000000+0300
+++ pymsnt-0.11.2.patched/src/legacy/msn/msn.py 2007-05-28
13:16:40.000000000 +0300
@@ -150,6 +150,8 @@
  MESSAGEDEBUG = False
  MSNP2PDEBUG = False

+SYS_MAXINT = 2147483647
+

  P2PSEQ = [-3, -2, 0, -1, 1, 2, 3, 4, 5, 6, 7, 8]
  def p2pseq(n):
@@ -2686,7 +2688,7 @@
          if baseID:
              self.baseID = baseID
          else:
-            self.baseID = random.randint(1000, sys.maxint)
+            self.baseID = random.randint(1000, SYS_MAXINT)
          self.pos = -1

      def get(self):
@@ -2713,7 +2715,7 @@
      def __init__(self, remoteUser, switchboard, sessionID, sessionGuid):
          self.dataFlag = 0
          if not sessionID:
-            sessionID = random.randint(1000, sys.maxint)
+            sessionID = random.randint(1000, SYS_MAXINT)
          if not sessionGuid:
              sessionGuid = random_guid()
          self.remoteUser = remoteUser
@@ -2759,7 +2761,7 @@
          binaryFields[1] = self.seqID.next()
          binaryFields[3] = len(msgStr)
          binaryFields[4] = binaryFields[3]
-        binaryFields[6] = random.randint(1000, sys.maxint)
+        binaryFields[6] = random.randint(1000, SYS_MAXINT)
          self.sendP2PMessage(binaryFields, msgStr)

      def sendP2PMessage(self, binaryFields, msgStr):
@@ -2793,7 +2795,7 @@
          binaryFields[1] = self.seqID.next()
          binaryFields[3] = 4
          binaryFields[4] = 4
-        binaryFields[6] = random.randint(1000, sys.maxint)
+        binaryFields[6] = random.randint(1000, SYS_MAXINT)
          binaryFields[9] = 1
          self.sendP2PMessage(binaryFields, chr(0) * 4)

@@ -2823,7 +2825,7 @@
          binaryFields[3] = self.filesize
          binaryFields[4] = len(chunk)
          binaryFields[5] = self.dataFlag
-        binaryFields[6] = random.randint(1000, sys.maxint)
+        binaryFields[6] = random.randint(1000, SYS_MAXINT)
          binaryFields[9] = 1
          self.offset += len(chunk)
          self.sendP2PMessage(binaryFields, chunk)
==========================================================================

Good luck!                                     Alexander





----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.


_______________________________________________
py-transports mailing list
py-transports@blathersource.org
http://lists.modevia.com/cgi-bin/mailman/listinfo/py-transports




--
- Norman Rasmussen
- Email: [EMAIL PROTECTED]
- Home page: http://norman.rasmussen.co.za/
_______________________________________________
py-transports mailing list
py-transports@blathersource.org
http://lists.modevia.com/cgi-bin/mailman/listinfo/py-transports

Reply via email to