in sdk/enclave/src/main/java/org/apache/teaclave/javasdk/enclave/InvocationWrapper.java [56:76]
private static void wrapReturnValue(EncData result, CallBacks callBacks, EnclaveInvocationResult ret) throws IOException {
byte[] returnedValBytes;
returnedValBytes = SerializationHelper.serialize(ret);
int returnedValLen = returnedValBytes.length;
/*
* Data returned to C world should be allocated by the callback function in the C world. The memory hold by
* returnedValBytes shall be freed in the explicit finally clause.
*/
try (CTypeConversion.CCharPointerHolder byteHolder = CTypeConversion.toCBytes(returnedValBytes)) {
CCharPointer returned;
if (callBacks.isNonNull() && callBacks.getMemCpyCCharPointerFunctionPointer().isNonNull()) {
returned = callBacks.getMemCpyCCharPointerFunctionPointer().invoke(byteHolder.get(), returnedValLen);
} else {
returned = byteHolder.get();
System.out.println("Warning: Not calling call backs in native, there is memory leak risk.");
//throw new RuntimeException("Function pointer memcpy_char_pointer is not set");
}
result.setData(returned);
result.setLen(returnedValLen);
}
}