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

This commit is contained in:
Steve Fan 2022-01-11 17:16:45 +08:00 committed by Sebastien Bourdeauducq
parent 4f87531565
commit 57e2ec629b
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))