Fix: bad string length
This commit is contained in:
@@ -256,7 +256,7 @@ class ClientCoreData(CompositeType):
|
||||
self.sasSequence = UInt16Le(Sequence.RNS_UD_SAS_DEL)
|
||||
self.kbdLayout = UInt32Le(KeyboardLayout.US)
|
||||
self.clientBuild = UInt32Le(3790)
|
||||
self.clientName = Buffer(b"rdpy" + b"\x00" * 11, read_len=lambda: 32)
|
||||
self.clientName = Buffer(("rdpy" + "\x00" * 12).encode("utf-16le"), read_len=lambda: 32)
|
||||
self.keyboardType = UInt32Le(KeyboardType.IBM_101_102_KEYS)
|
||||
self.keyboardSubType = UInt32Le(0)
|
||||
self.keyboardFnKeys = UInt32Le(12)
|
||||
@@ -310,13 +310,14 @@ class ServerSecurityData(CompositeType):
|
||||
self.serverRandom = Buffer(read_len=lambda: self.serverRandomLen.value, conditional=lambda: not(self.encryptionMethod.value == 0 and self.encryptionLevel.value == 0))
|
||||
self.serverCertificate = ServerCertificate(readLen=lambda: self.serverCertLen.value, conditional=lambda: not(self.encryptionMethod.value == 0 and self.encryptionLevel.value == 0))
|
||||
|
||||
|
||||
class ServerCertificate(CompositeType):
|
||||
"""
|
||||
@summary: Server certificate structure
|
||||
@see: http://msdn.microsoft.com/en-us/library/cc240521.aspx
|
||||
"""
|
||||
def __init__(self, certData = None, readLen = None, conditional = lambda:True):
|
||||
CompositeType.__init__(self, readLen = readLen, conditional = conditional)
|
||||
def __init__(self, certData = None, read_len = None, conditional = lambda:True):
|
||||
CompositeType.__init__(self, read_len=read_len, conditional = conditional)
|
||||
self.dwVersion = UInt32Le(lambda:(self.certData.__class__._TYPE_))
|
||||
|
||||
def CertificateFactory():
|
||||
@@ -492,7 +493,7 @@ class Settings(CompositeType):
|
||||
"""
|
||||
def __init__(self, init=None, read_len=None):
|
||||
super().__init__(read_len=read_len)
|
||||
self.settings = ArrayType(DataBlock, [DataBlock(i) for i in init])
|
||||
self.settings = ArrayType(DataBlock, [DataBlock(i) for i in init or []])
|
||||
|
||||
def get_block(self, message_type):
|
||||
"""
|
||||
|
||||
@@ -273,11 +273,11 @@ def readOctetStream(s, octetStream, minValue = 0):
|
||||
"""
|
||||
size = readLength(s) + minValue
|
||||
if size != len(octetStream):
|
||||
raise InvalidValue("incompatible size %d != %d"(len(octetStream), size))
|
||||
raise InvalidValue("incompatible size %d != %d"%(len(octetStream), size))
|
||||
for i in range(0, size):
|
||||
c = UInt8()
|
||||
s.read_type(c)
|
||||
if ord(octetStream[i]) != c.value:
|
||||
if octetStream[i] != c.value:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
@@ -380,7 +380,7 @@ class CompositeType(Message):
|
||||
s.read_type(self.__dict__[name])
|
||||
read_len += sizeof(self.__dict__[name])
|
||||
# read is ok but read out of bound
|
||||
if self._read_len is not None and read_len > self._read_len.value:
|
||||
if self._read_len is not None and read_len > self._read_len():
|
||||
# roll back
|
||||
s.seek(-sizeof(self.__dict__[name]), 1)
|
||||
# and notify if not optional
|
||||
@@ -396,9 +396,9 @@ class CompositeType(Message):
|
||||
s.seek(-sizeof(self.__dict__[tmp_name]), 1)
|
||||
raise e
|
||||
|
||||
if self._read_len is not None and read_len < self._read_len.value:
|
||||
log.debug("Still have correct data in packet %s, read %s bytes as padding"%(self.__class__, self._read_len.value - read_len))
|
||||
s.read(self._read_len.value - read_len)
|
||||
if self._read_len is not None and read_len < self._read_len():
|
||||
log.debug("Still have correct data in packet %s, read %s bytes as padding"%(self.__class__, self._read_len() - read_len))
|
||||
s.read(self._read_len() - read_len)
|
||||
|
||||
def __write__(self, s):
|
||||
"""
|
||||
@@ -419,7 +419,7 @@ class CompositeType(Message):
|
||||
@return: sum of sizeof of each Type attributes
|
||||
"""
|
||||
if self._is_readed and not self._read_len is None:
|
||||
return self._read_len.value
|
||||
return self._read_len()
|
||||
|
||||
size = 0
|
||||
for name in self._type_name:
|
||||
|
||||
Reference in New Issue
Block a user