mirror of
https://github.com/neovim/neovim.git
synced 2025-10-15 14:26:07 +00:00
functests: Test for error conditions
During testing found the following bugs: 1. msgpack-gen.lua script is completely unprepared for Float values either in return type or in arguments. Specifically: 1. At the time of writing relevant code FLOAT_OBJ did not exist as well as FLOATING_OBJ, but it would be used by msgpack-gen.lua should return type be Float. I added FLOATING_OBJ macros later because did not know that msgpack-gen.lua uses these _OBJ macros, otherwise it would be FLOAT_OBJ. 2. msgpack-gen.lua should use .data.floating in place of .data.float. But it did not expect that .data subattribute may have name different from lowercased type name. 2. vim_replace_termcodes returned its argument as-is if it receives an empty string (as well as _vim_id*() functions did). But if something in returned argument lives in an allocated memory such action will cause double free: once when freeing arguments, then when freeing return value. It did not cause problems yet because msgpack bindings return empty string as {NULL, 0} and nothing was actually allocated. 3. New code in msgpack-gen.lua popped arguments in reversed order, making lua bindings’ signatures be different from API ones.
This commit is contained in:
@@ -351,7 +351,7 @@ void set_option_to(void *to, int type, String name, Object value, Error *err)
|
||||
#define TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER TYPVAL_ENCODE_CONV_NUMBER
|
||||
|
||||
#define TYPVAL_ENCODE_CONV_FLOAT(tv, flt) \
|
||||
kv_push(edata->stack, FLOATING_OBJ((Float)(flt)))
|
||||
kv_push(edata->stack, FLOAT_OBJ((Float)(flt)))
|
||||
|
||||
#define TYPVAL_ENCODE_CONV_STRING(tv, str, len) \
|
||||
do { \
|
||||
|
@@ -27,7 +27,7 @@
|
||||
.type = kObjectTypeInteger, \
|
||||
.data.integer = i })
|
||||
|
||||
#define FLOATING_OBJ(f) ((Object) { \
|
||||
#define FLOAT_OBJ(f) ((Object) { \
|
||||
.type = kObjectTypeFloat, \
|
||||
.data.floating = f })
|
||||
|
||||
|
Reference in New Issue
Block a user