diff options
| author | chenzizhan <[email protected]> | 2023-08-10 10:00:40 +0800 |
|---|---|---|
| committer | chenzizhan <[email protected]> | 2023-08-10 10:00:40 +0800 |
| commit | bdca40c14e22f3b9bbc0cbf64b01623ad53986ab (patch) | |
| tree | f75ed998b70e64a8270143c9bf998fea80e1cd11 /src | |
| parent | 3a562a8bdd385b030685308bf0143021b10f2150 (diff) | |
add cube id checkv4.0.3
Diffstat (limited to 'src')
| -rw-r--r-- | src/fieldstat.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/src/fieldstat.c b/src/fieldstat.c index 2e42637..5c09c95 100644 --- a/src/fieldstat.c +++ b/src/fieldstat.c @@ -108,8 +108,8 @@ int fieldstat_unregister_cube(struct fieldstat *instance, int cube_id) printf("ERR: instance is NULL\n"); return -1; } - if (cube_id >= instance->valid_cube_arr_length) { - printf("ERR: cube_id is out of range\n"); + if (cube_id < 0 || cube_id >= instance->valid_cube_arr_length) { + printf("ERR: cube_id is out of range, cube_id: %d\n", cube_id); return -1; } if (instance->shared_tag_cube_manager != NULL) { @@ -117,6 +117,10 @@ int fieldstat_unregister_cube(struct fieldstat *instance, int cube_id) cube_manager_free(instance->shared_tag_cube_manager); instance->shared_tag_cube_manager = NULL; } + if (instance->cube[cube_id] == NULL) { + printf("ERR: cube_id is not registered\n"); + return -1; + } fieldstat_cube_free(instance, cube_id); instance->cube[cube_id] = NULL; instance->cube_version[cube_id]++; @@ -192,7 +196,11 @@ int fieldstat_append_cube_to_instance(struct fieldstat *instance, struct fs_cube } if (instance->valid_cube_arr_length >= instance->max_n_cube) { instance->max_n_cube *= 2; - instance->cube = realloc(instance->cube, sizeof(struct fs_cube *) * instance->max_n_cube); + struct fs_fieldstat_cube **old_cube_arr = instance->cube; + instance->cube = calloc(instance->max_n_cube, sizeof(struct fs_cube *)); + memcpy(instance->cube, old_cube_arr, sizeof(struct fs_cube *) * instance->valid_cube_arr_length); + free(old_cube_arr); + unsigned long *old_ver_arr = instance->cube_version; instance->cube_version = calloc(instance->max_n_cube, sizeof(unsigned long)); memcpy(instance->cube_version, old_ver_arr, sizeof(unsigned long) * instance->valid_cube_arr_length); @@ -269,6 +277,11 @@ int fieldstat_cube_add(struct fieldstat *instance, int cube_id, const struct fie printf("ERR: fieldstat instance is NULL\n"); return -1; } + if (cube_id < 0 || cube_id >= instance->valid_cube_arr_length) { + printf("ERR: cube_id is invalid, %d\n", cube_id); + return -1; + } + struct fs_cube *cube = instance->cube[cube_id]; if (cube == NULL) { printf("ERR: fieldstat_cube_add cube is not registered yet\n"); @@ -346,6 +359,10 @@ int fieldstat_register_counter(struct fieldstat *instance, int cube_id, const ch printf("ERR: fieldstat instance is NULL\n"); return -1; } + if (cube_id < 0 || cube_id >= instance->valid_cube_arr_length) { + printf("ERR: fieldstat_register_hist cube_id is invalid, %d\n", cube_id); + return -1; + } struct fs_cube *cube = instance->cube[cube_id]; if (cube == NULL) { printf("ERR: fieldstat_register_counter cube is not registered yet\n"); @@ -362,6 +379,10 @@ int fieldstat_register_hll(struct fieldstat *instance, int cube_id, const char * printf("ERR: fieldstat instance is NULL\n"); return -1; } + if (cube_id < 0 || cube_id >= instance->valid_cube_arr_length) { + printf("ERR: fieldstat_register_hist cube_id is invalid, %d\n", cube_id); + return -1; + } struct fs_cube *cube = instance->cube[cube_id]; if (cube == NULL) { printf("ERR: fieldstat_register_hll cube is not registered yet\n"); @@ -382,6 +403,10 @@ int fieldstat_register_hist(struct fieldstat *instance, int cube_id, const char printf("ERR: fieldstat instance is NULL\n"); return -1; } + if (cube_id < 0 || cube_id >= instance->valid_cube_arr_length) { + printf("ERR: fieldstat_register_hist cube_id is invalid, %d\n", cube_id); + return -1; + } struct fs_cube *cube = instance->cube[cube_id]; if (cube == NULL) { printf("ERR: fieldstat_register_histogram cube is not registered yet\n"); @@ -1031,7 +1056,7 @@ struct fieldstat *fieldstat_dup(const struct fieldstat *instance) void fieldstat_cube_read_cell(const struct fieldstat *instance, int cube_id, int **cell_ids, struct fieldstat_tag_list **tag_list, size_t *n_cell) { - if (cube_id >= instance->max_n_cube) { + if (cube_id < 0 || cube_id >= instance->valid_cube_arr_length) { printf("ERR: fieldstat_cube_read_cell cube id is invalid, cube id: %d\n", cube_id); return; } |
