Use union to convert between jerryx_arg_int_option_t and uintptr_t (#2718)
This fixes potential out-of-bounds reads in jerry-ext when dealing with integer argument mappings. Fixes #2713 JerryScript-DCO-1.0-Signed-off-by: Akos Kiss akiss@inf.u-szeged.hu
This commit is contained in:
@@ -94,12 +94,16 @@ typedef struct
|
||||
func = jerryx_arg_transform_ ## type; \
|
||||
} \
|
||||
} \
|
||||
const jerryx_arg_int_option_t int_option = { .round = (uint8_t) round_flag, .clamp = (uint8_t) clamp_flag }; \
|
||||
union \
|
||||
{ \
|
||||
jerryx_arg_int_option_t int_option; \
|
||||
uintptr_t extra_info; \
|
||||
} u = { .int_option = { .round = (uint8_t) round_flag, .clamp = (uint8_t) clamp_flag } }; \
|
||||
return (jerryx_arg_t) \
|
||||
{ \
|
||||
.func = func, \
|
||||
.dest = (void *) dest, \
|
||||
.extra_info = *(uintptr_t *) &int_option \
|
||||
.extra_info = u.extra_info \
|
||||
}; \
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user