From 9f1b40b93a51e1c4d2e667dbd69b18c9d10647f0 Mon Sep 17 00:00:00 2001 From: kylin-bot Date: Sat, 7 Feb 2026 17:11:41 +0800 Subject: [PATCH] apply patch 5067 --- .../community-multidevice/community_ops.c | 8 ++ src/lib/biometric_common.c | 85 +++++++++++++++++-- src/lib/biometric_stroge.c | 6 ++ .../biometric-config-tool-remove-driver.c | 8 +- 4 files changed, 97 insertions(+), 10 deletions(-) diff --git a/src/drivers/community-multidevice/community_ops.c b/src/drivers/community-multidevice/community_ops.c index 3c264e4..4c54472 100644 --- a/src/drivers/community-multidevice/community_ops.c +++ b/src/drivers/community-multidevice/community_ops.c @@ -689,6 +689,14 @@ feature_info *community_ops_search(bio_dev *dev, OpsActions action, int uid, int } search_data *searchData = malloc(sizeof(search_data)); + + if (searchData == NULL) { + bio_print_error(_("Memory allocation failed for search_data\n")); + bio_set_dev_status(dev, DEVS_COMM_IDLE); + bio_set_ops_result(dev, OPS_COMM_ERROR); + bio_set_notify_abs_mid(dev, NOTIFY_COMM_ERROR); + return NULL; + } // search_data *searchData; searchData->dev = dev; searchData->uid = uid; diff --git a/src/lib/biometric_common.c b/src/lib/biometric_common.c index d988768..57388d1 100644 --- a/src/lib/biometric_common.c +++ b/src/lib/biometric_common.c @@ -1841,6 +1841,8 @@ bio_dev * bio_dev_new() dev = malloc(sizeof(bio_dev)); if (dev != NULL) memset(dev, 0, sizeof(bio_dev)); + else + return NULL; return dev; } @@ -2185,17 +2187,71 @@ void bio_dev_glist_data_free(bio_dev * dev, gpointer p2) bio_extend *bio_ops_create_node(char *key, char *value, char *type, char *description, char *user) { bio_extend *node = (bio_extend *)malloc(sizeof(bio_extend)); + if (node == NULL) { + bio_print_error(_("Memory allocation failed for bio_extend node\n")); + return NULL; + } + node->key = (char *)malloc(MAX_PATH_LEN * sizeof(char)); + if (node->key == NULL) { + free(node); + bio_print_error(_("Memory allocation failed for key\n")); + return NULL; + } + node->value = (char *)malloc(MAX_PATH_LEN * sizeof(char)); + if (node->value == NULL) { + free(node->key); + free(node); + bio_print_error(_("Memory allocation failed for value\n")); + return NULL; + } + node->type = (char *)malloc(MAX_PATH_LEN * sizeof(char)); + if (node->type == NULL) { + free(node->value); + free(node->key); + free(node); + bio_print_error(_("Memory allocation failed for type\n")); + return NULL; + } + node->description = (char *)malloc(MAX_PATH_LEN * sizeof(char)); + if (node->description == NULL) { + free(node->type); + free(node->value); + free(node->key); + free(node); + bio_print_error(_("Memory allocation failed for description\n")); + return NULL; + } + node->user = (char *)malloc(MAX_PATH_LEN * sizeof(char)); - snprintf(node->key, MAX_PATH_LEN * sizeof(char), "%s", key); - snprintf(node->value, MAX_PATH_LEN * sizeof(char), "%s", value); - snprintf(node->type, MAX_PATH_LEN * sizeof(char), "%s", type); - snprintf(node->description, MAX_PATH_LEN * sizeof(char), "%s", description); - snprintf(node->user, MAX_PATH_LEN * sizeof(char), "%s", user); + if (node->user == NULL) { + free(node->description); + free(node->type); + free(node->value); + free(node->key); + free(node); + bio_print_error(_("Memory allocation failed for user\n")); + return NULL; + } + + // 初始化内存 + memset(node->key, 0, MAX_PATH_LEN * sizeof(char)); + memset(node->value, 0, MAX_PATH_LEN * sizeof(char)); + memset(node->type, 0, MAX_PATH_LEN * sizeof(char)); + memset(node->description, 0, MAX_PATH_LEN * sizeof(char)); + memset(node->user, 0, MAX_PATH_LEN * sizeof(char)); + + // 复制数据 + snprintf(node->key, MAX_PATH_LEN * sizeof(char), "%s", key); + snprintf(node->value, MAX_PATH_LEN * sizeof(char), "%s", value); + snprintf(node->type, MAX_PATH_LEN * sizeof(char), "%s", type); + snprintf(node->description, MAX_PATH_LEN * sizeof(char), "%s", description); + snprintf(node->user, MAX_PATH_LEN * sizeof(char), "%s", user); node->next = NULL; + bio_print_debug(_("The linked list node was created successfully\n")); return node; } @@ -2284,12 +2340,16 @@ int bio_ops_free_extend_list(bio_extend *list) /* 开发者使用,通过key获取链表结点 */ bio_extend *bio_get_value_by_key(bio_extend *list, char *key) { - bio_extend *node; + bio_extend *node = NULL; bio_extend *p; p = list; while (p) { if (!strcmp(p->key, key)) { node = bio_ops_create_node(p->key, p->value, p->type, p->description, p->user); + if (node == NULL) { + bio_print_error(_("Failed to create node for key: %s\n"), key); + return NULL; + } break; } p = p->next; @@ -2323,6 +2383,10 @@ int bio_init_ro_extend_list(bio_dev *dev, char *key, void *value, char *type, ch { bio_extend *ExtendNode; ExtendNode = bio_ops_create_node(key, value, type, description, user); + if (ExtendNode == NULL) { + bio_print_error("Failed to create extend node\n"); + return -1; + } dev->ro_extend_list = bio_ops_add_node(ExtendNode, dev->ro_extend_list); if (dev->ro_extend_list != NULL) { @@ -2482,6 +2546,11 @@ bio_extend *bio_ops_analyzing_extend_conf_file(bio_dev* dev) while (fgets(buf, MAX_PATH_LEN, dev->extend_conf_handle) != NULL) { if(parameter_count == 0){ list = (bio_extend *)malloc(sizeof(bio_extend)); + if (list == NULL) { + // 处理内存分配失败的情况 + bio_print_error("Memory allocation failed for bio_extend\n"); + return NULL; + } list->key = (char *)malloc(MAX_PATH_LEN * sizeof(char)); memset(list->key, 0, MAX_PATH_LEN); list->value = (char *)malloc(MAX_PATH_LEN * sizeof(char)); @@ -2568,6 +2637,10 @@ int bio_init_wr_extend_list(bio_dev* dev, char* key, char* value, char* type, ch // 创建节点、添加节点 bio_extend *ExtendNode; ExtendNode = bio_ops_create_node(key, value, type, description, user); + if (ExtendNode == NULL) { + bio_print_error("Failed to create extend node\n"); + return -1; + } dev->wr_extend_list = bio_ops_add_node(ExtendNode, dev->wr_extend_list); bio_print_debug(_("Readable and writable extended list initialized successfully\n")); diff --git a/src/lib/biometric_stroge.c b/src/lib/biometric_stroge.c index 02dedc4..08fed43 100644 --- a/src/lib/biometric_stroge.c +++ b/src/lib/biometric_stroge.c @@ -449,6 +449,12 @@ feature_info *bio_sto_get_feature_info(sqlite3 *db, old_uid = uid; old_bio_type = biotype; old_driver = internal_newstr(driver); + if (old_driver == NULL) { + bio_print_error(_("Memory allocation failed for driver string\n")); + sqlite3_finalize(stmt); + bio_sto_free_feature_info_list(info_list); + return NULL; + } old_idx = idx; snprintf(old_uuid, UUID_BUF_LEN,"%s",uuid ); diff --git a/src/utils/biometric-config-tool/biometric-config-tool-remove-driver.c b/src/utils/biometric-config-tool/biometric-config-tool-remove-driver.c index e55fa09..d884c1b 100644 --- a/src/utils/biometric-config-tool/biometric-config-tool-remove-driver.c +++ b/src/utils/biometric-config-tool/biometric-config-tool-remove-driver.c @@ -86,10 +86,10 @@ biometric_config_remove_driver (int argc, char **argv, GError **error) { gboolean enable = g_key_file_get_boolean(bio_config_file, argv[i],"Enable", NULL); // g_printerr("IsEnable = %s\n", (enable)?"true":"false"); - if (enable==0) - g_key_file_remove_group (bio_config_file, - argv[i], - NULL); + // if (enable==0) + g_key_file_remove_group (bio_config_file, + argv[i], + NULL); } if (!g_key_file_save_to_file (bio_config_file, -- Gitee