flatbuffer Bugs
有些算不上bug,但也在此罗列方便查询。
序号 | 时间 | 描述 | 位置 | 处理 |
---|---|---|---|---|
001 | 2020-12-23 | <table>_type_identifier 中有\x00字符 | flatbuffers_type_hash_from_string | note |
2020-12-25 | 字段值为默认值时,转json时将不生成json字段 | src/runtime/json_printer.c | note | |
2020-12-25 | bool类型被强制默认值为false | 需注意 | ||
004 | 2021-06-29 | 数值类型会自动把0设为默认值 | 数据不希望如此,可以手动将默认值设置为其它数值解决,比如最大值为默认值。 | |
005 | 2021-06-29 | 同时交叉操作两个数组会造成错误 | 数组计数错误甚至崩溃 |
002
可通过 flatcc_json_printer_set_force_default x=1 避免此问题
#define __define_print_scalar_field(TN, T) \
void flatcc_json_printer_ ## TN ## _field(flatcc_json_printer_t *ctx, \
flatcc_json_printer_table_descriptor_t *td, \
int id, const char *name, size_t len, T v) \
{ \
T x; \
const void *p = get_field_ptr(td, id); \
\
if (p) { \
x = flatbuffers_ ## TN ## _read_from_pe(p); \
if (x == v && ctx->skip_default) { \
return; \
} \
} else { \
if (!ctx->force_default) { \
return; \ <--被此处过滤
} \
x = v; \
} \
if (td->count++) { \
print_char(','); \
} \
print_name(ctx, name, len); \
ctx->p += print_ ## TN (x, ctx->p); \
}