comm_kernel: check if elements are within bounds for RPC list (#1824)

pull/1828/head
Steve Fan 2022-01-11 17:16:45 +08:00 committed by GitHub
parent 4eee49f889
commit de5892a00a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 4 deletions

View File

@ -476,11 +476,19 @@ class CommKernel:
if tag_element == "b":
self._write(bytes(value))
elif tag_element == "i":
self._write(struct.pack(self.endian + "%sl" %
len(value), *value))
try:
self._write(struct.pack(self.endian + "%sl" % len(value), *value))
except struct.error:
raise RPCReturnValueError(
"type mismatch: cannot serialize {value} as {type}".format(
value=repr(value), type="32-bit integer list"))
elif tag_element == "I":
self._write(struct.pack(self.endian + "%sq" %
len(value), *value))
try:
self._write(struct.pack(self.endian + "%sq" % len(value), *value))
except struct.error:
raise RPCReturnValueError(
"type mismatch: cannot serialize {value} as {type}".format(
value=repr(value), type="64-bit integer list"))
elif tag_element == "f":
self._write(struct.pack(self.endian + "%sd" %
len(value), *value))