Changeset 1157
- Timestamp:
- 04/10/08 19:32:23 (2 years ago)
- Location:
- pyamf/trunk/pyamf
- Files:
-
- 2 modified
-
amf3.py (modified) (11 diffs)
-
tests/test_amf3.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
pyamf/trunk/pyamf/amf3.py
r1101 r1157 861 861 ASTypes.BOOL_FALSE: 'readBoolFalse', 862 862 ASTypes.BOOL_TRUE: 'readBoolTrue', 863 ASTypes.INTEGER: 'read Integer',863 ASTypes.INTEGER: 'readSignedInteger', 864 864 ASTypes.NUMBER: 'readNumber', 865 865 ASTypes.STRING: 'readString', … … 926 926 return self.stream.read_double() 927 927 928 def readInteger(self): 928 def readUnsignedInteger(self): 929 """ 930 Reads and returns an unsigned integer from the stream. 931 """ 932 return self.readInteger(False) 933 934 def readSignedInteger(self): 935 """ 936 Reads and returns a signed integer from the stream. 937 """ 938 return self.readInteger(True) 939 940 def readInteger(self, signed=False): 929 941 """ 930 942 Reads and returns an integer from the stream. … … 951 963 952 964 if result & 0x10000000 != 0: 953 result <<= 1 954 result += 1 965 if signed: 966 result -= 0x20000000 967 else: 968 result <<= 1 969 result += 1 955 970 956 971 return result … … 964 979 """ 965 980 def readLength(): 966 x = self.read Integer()981 x = self.readUnsignedInteger() 967 982 968 983 return (x >> 1, x & REFERENCE_BIT == 0) … … 987 1002 The timezone is ignored as the date is always in UTC. 988 1003 """ 989 ref = self.read Integer()1004 ref = self.readUnsignedInteger() 990 1005 991 1006 if ref & REFERENCE_BIT == 0: … … 1010 1025 <http://www.docuverse.com/blog/donpark/2007/05/14/flash-9-amf3-bug>} 1011 1026 """ 1012 size = self.read Integer()1027 size = self.readUnsignedInteger() 1013 1028 1014 1029 if size & REFERENCE_BIT == 0: … … 1084 1099 attr = self.readString() 1085 1100 1086 ref = self.read Integer()1101 ref = self.readUnsignedInteger() 1087 1102 1088 1103 if ref & REFERENCE_BIT == 0: … … 1130 1145 @param legacy: The read XML is in 'legacy' format. 1131 1146 """ 1132 ref = self.read Integer()1147 ref = self.readUnsignedInteger() 1133 1148 1134 1149 if ref & REFERENCE_BIT == 0: … … 1172 1187 @note: This is not supported in ActionScript 1.0 and 2.0. 1173 1188 """ 1174 ref = self.read Integer()1189 ref = self.readUnsignedInteger() 1175 1190 1176 1191 if ref & REFERENCE_BIT == 0: … … 1307 1322 @param use_references: 1308 1323 """ 1309 if n > 0x3fffffff:1324 if n & 0xf0000000 not in [0, 0xf0000000]: 1310 1325 self.writeNumber(n) 1311 1326 … … 1717 1732 1718 1733 def _encode_int(n): 1719 if n > 0x40000000:1734 if n & 0xf0000000 not in [0, 0xf0000000]: 1720 1735 raise ValueError, "Out of range" 1721 1736 1722 1737 bytes = '' 1723 1738 real_value = None 1739 1740 if n < 0: 1741 n += 0x20000000 1724 1742 1725 1743 if n > 0x1fffff: -
pyamf/trunk/pyamf/tests/test_amf3.py
r1099 r1157 299 299 def test_integer(self): 300 300 self._run([(0, '\x04\x00')]) 301 self._run([(0x35, '\x04\x35')]) 301 302 self._run([(0x7f, '\x04\x7f')]) 302 303 self._run([(0x80, '\x04\x81\x00')]) 304 self._run([(0xd4, '\x04\x81\x54')]) 303 305 self._run([(0x3fff, '\x04\xff\x7f')]) 304 306 self._run([(0x4000, '\x04\x81\x80\x00')]) 307 self._run([(0x1a53f, '\x04\x86\xca\x3f')]) 305 308 self._run([(0x1fffff, '\x04\xff\xff\x7f')]) 306 309 self._run([(0x200000, '\x04\x80\xc0\x80\x00')]) 307 self._run([(0x3fffffff, '\x04\xff\xff\xff\xff')]) 310 self._run([(-0x01, '\x04\xff\xff\xff\xff')]) 311 self._run([(-0x2a, '\x04\xff\xff\xff\xd6')]) 312 self._run([(0xfffffff, '\x04\xbf\xff\xff\xff')]) 313 self._run([(-0x10000000, '\x04\xc0\x80\x80\x00')]) 314 self._run([(0x10000000, '\x05\x41\xb0\x00\x00\x00\x00\x00\x00')]) 315 self._run([(-0x10000001, '\x05\xc1\xb0\x00\x00\x01\x00\x00\x00')]) 308 316 309 317 def test_number(self): … … 331 339 332 340 self.encoder.writeString(UnicodeObject()) 333 self.assertEquals(self.buf.getvalue(), '\x06+M\xc3\x83\xc3\x82\xc2\xb6tley Cr\xc3\x83\xc3\x82\xc2\xbce') 341 self.assertEquals(self.buf.getvalue(), '\x06+M\xc3\x83\xc3\x82\xc2' 342 '\xb6tley Cr\xc3\x83\xc3\x82\xc2\xbce') 334 343 self.buf.truncate() 335 344 self.context.clear() 336 345 337 346 self.encoder.writeString(StrObject()) 338 self.assertEquals(self.buf.getvalue(), '\x06+M\xc3\x83\xc3\x82\xc2\xb6tley Cr\xc3\x83\xc3\x82\xc2\xbce') 347 self.assertEquals(self.buf.getvalue(), '\x06+M\xc3\x83\xc3\x82\xc2' 348 '\xb6tley Cr\xc3\x83\xc3\x82\xc2\xbce') 339 349 self.buf.truncate() 340 350 self.context.clear() 341 351 342 352 self.encoder.writeString(ReprObject()) 343 self.assertEquals(self.buf.getvalue(), '\x06+M\xc3\x83\xc3\x82\xc2\xb6tley Cr\xc3\x83\xc3\x82\xc2\xbce') 353 self.assertEquals(self.buf.getvalue(), '\x06+M\xc3\x83\xc3\x82\xc2' 354 '\xb6tley Cr\xc3\x83\xc3\x82\xc2\xbce') 344 355 self.buf.truncate() 345 356 self.context.clear() 346 357 347 self.encoder.writeString('M\xc3\x83\xc3\x82\xc2\xb6tley Cr\xc3\x83\xc3\x82\xc2\xbce') 348 self.assertEquals(self.buf.getvalue(), '\x06+M\xc3\x83\xc3\x82\xc2\xb6tley Cr\xc3\x83\xc3\x82\xc2\xbce') 358 self.encoder.writeString('M\xc3\x83\xc3\x82\xc2\xb6tley Cr\xc3\x83' 359 '\xc3\x82\xc2\xbce') 360 self.assertEquals(self.buf.getvalue(), '\x06+M\xc3\x83\xc3\x82\xc2' 361 '\xb6tley Cr\xc3\x83\xc3\x82\xc2\xbce') 349 362 350 363 … … 619 632 def test_integer(self): 620 633 self._run([(0, '\x04\x00')]) 634 self._run([(0x35, '\x04\x35')]) 621 635 self._run([(0x7f, '\x04\x7f')]) 622 636 self._run([(0x80, '\x04\x81\x00')]) 637 self._run([(0xd4, '\x04\x81\x54')]) 623 638 self._run([(0x3fff, '\x04\xff\x7f')]) 624 639 self._run([(0x4000, '\x04\x81\x80\x00')]) 640 self._run([(0x1a53f, '\x04\x86\xca\x3f')]) 625 641 self._run([(0x1fffff, '\x04\xff\xff\x7f')]) 626 642 self._run([(0x200000, '\x04\x80\xc0\x80\x00')]) 627 self._run([(0x3fffffff, '\x04\xff\xff\xff\xff')]) 643 self._run([(-0x01, '\x04\xff\xff\xff\xff')]) 644 self._run([(-0x2a, '\x04\xff\xff\xff\xd6')]) 645 self._run([(0xfffffff, '\x04\xbf\xff\xff\xff')]) 646 self._run([(-0x10000000, '\x04\xc0\x80\x80\x00')]) 647 648 def test_unsignedInteger(self): 649 tests = [ 650 (0, '\x00'), 651 (0x7f, '\x7f'), 652 (0x80, '\x81\x00'), 653 (0x3fff, '\xff\x7f'), 654 (0x4000, '\x81\x80\x00'), 655 (0x1fffff, '\xff\xff\x7f'), 656 (0x200000, '\x80\xc0\x80\x00'), 657 (0x3fffffff, '\xff\xff\xff\xff') 658 ] 659 660 for n, s in tests: 661 self.buf.truncate(0) 662 self.buf.write(s) 663 self.buf.seek(0) 664 self.assertEqual(self.decoder.readUnsignedInteger(), n) 628 665 629 666 def test_infinites(self): … … 996 1033 self.assertEquals(id(obj1), id(obj2)) 997 1034 998 def test_class_references(self):999 pass1000 1001 1035 def test_static(self): 1002 1036 pyamf.register_class(Spam, 'abc.xyz')
