check return pointer sizes in binding stubs

This commit is contained in:
Martin Fouilleul 2023-09-12 17:06:01 +02:00
parent d90c11db58
commit db36158e7a
1 changed files with 7 additions and 1 deletions

View File

@ -128,6 +128,12 @@ def bindgen(apiName, spec, **kwargs):
retTypeCName = decl['ret'].get('cname', retTypeName) retTypeCName = decl['ret'].get('cname', retTypeName)
s += retTypeCName + '* __retPtr = (' + retTypeCName + '*)((char*)_mem + *(i32*)&_sp[0]);\n' s += retTypeCName + '* __retPtr = (' + retTypeCName + '*)((char*)_mem + *(i32*)&_sp[0]);\n'
s += '\t{\n'
s += '\t\tOC_ASSERT(((char*)__retPtr >= (char*)_mem) && (((char*)__retPtr - (char*)_mem) < m3_GetMemorySize(runtime)), "return pointer is out of bounds");\n'
s += '\t\tOC_ASSERT((char*)__retPtr + sizeof(' + retTypeCName + ') <= ((char*)_mem + m3_GetMemorySize(runtime)), "return pointer is out of bounds");\n'
s += '\t}\n'
for argIndex, arg in enumerate(decl['args']): for argIndex, arg in enumerate(decl['args']):
argName = arg['name'] argName = arg['name']
@ -193,7 +199,7 @@ def bindgen(apiName, spec, **kwargs):
if typeCName.endswith('**') or (typeCName.startswith('void') == False and typeCName.startswith('const void') == False): if typeCName.endswith('**') or (typeCName.startswith('void') == False and typeCName.startswith('const void') == False):
s += '*sizeof('+typeCName[:-1]+')' s += '*sizeof('+typeCName[:-1]+')'
s += ' <= ((char*)_mem + m3_GetMemorySize(runtime)), "parameter \''+argName+'\' overflows wasm memory");\n' s += ' <= ((char*)_mem + m3_GetMemorySize(runtime)), "parameter \''+argName+'\' is out of bounds");\n'
s += '\t}\n' s += '\t}\n'
s += '\t' s += '\t'