PengZheng commented on issue #723:
URL: https://github.com/apache/celix/issues/723#issuecomment-1908374062

   I try to give the following definitions:
   
   **Standard argument should be serializable.** All types except types 
involving untyped pointer or double pointer (pointer to pointer) are 
serializable. For example, complex types consisting of non-pointer fields are 
serializable while complex type containing a untyped pointer field is not 
serializable; `[I` is serializable while `[P` and `[**D` are not serializable.
   
   `am=out` parameter should be pointer to text or double pointer to 
serializable types.
   
   `am=pre` parameter should be pointer to **trivially copyable type**. It's 
safe to apply `memcpy` rivially copyable type without the usual danger of 
shallow copy. However, this definition is only meant to make the following code 
work:
   
   ```C
                        if (meta == 
DYN_FUNCTION_ARGUMENT_META__PRE_ALLOCATED_OUTPUT) {
                                void *tmp = NULL;
                                void **out = (void **) args[i];
                                size_t size = 0;
   
    
                        dynType_typedPointer_getTypedType(argType, &argType);
                        status = jsonSerializer_deserializeJson(argType, 
result, &tmp);
                        if (tmp != NULL) {
                                size = dynType_size(argType);
                                memcpy(*out, tmp, size);
                        }
                        dynType_free(argType, tmp);
                                
   ```
   
   By this definition, `[D` can not be used as `am=pre`, because 
`dynType_free(argType, tmp)` will free the embedded buffer, which has been 
copied to `*out` (thus lead to use-after-free). I think the main usage of 
SequenceType is to be used as pre-allocated output paramter and let the callee 
to fill in actual content. Thus this definition will make SequenceType useless.
   
   Any ideas to make `am=pre` work? @pnoltes 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@celix.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to