From 2e03f91596027ff8dfaf38a9b06be1249f609cb0 Mon Sep 17 00:00:00 2001 From: Ulysse Cura Date: Thu, 6 Aug 2026 13:52:30 +0200 Subject: [PATCH] Corrected possible segmentatino fault in component querying in components initialisation. --- src/components/animation_system.c | 9 +++++++-- src/components/hitbox_component.c | 9 +++++++-- src/components/physics_system.c | 18 +++++++++++++++--- src/components/player_system.c | 28 +++++++++++++++++++++++----- src/components/sprite_component.c | 13 +++++++++---- 5 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/components/animation_system.c b/src/components/animation_system.c index be4bb2e..448aa96 100644 --- a/src/components/animation_system.c +++ b/src/components/animation_system.c @@ -9,8 +9,13 @@ int animation_system_init(component_t *component) { animation_system_data_t *system_data = component->data; - system_data->sprite_component_data = entity_get_component(component->entity, SPRITE_COMPONENT)->data; - if(!system_data->sprite_component_data) return EXIT_FAILURE; + component_t *sprite_component = entity_get_component(component->entity, SPRITE_COMPONENT); + if(!sprite_component) + { + error_printf("Animation system require a sprite component."); + return EXIT_FAILURE; + } + system_data->sprite_component_data = sprite_component->data; system_data->nb_frames = 1; system_data->current_frame_nb = 0; diff --git a/src/components/hitbox_component.c b/src/components/hitbox_component.c index 314f5fd..a3206ef 100644 --- a/src/components/hitbox_component.c +++ b/src/components/hitbox_component.c @@ -9,8 +9,13 @@ int hitbox_component_init(component_t *component) { hitbox_component_data_t *component_data = component->data; - component_data->transform_component_data = entity_get_component(component->entity, TRANSFORM_COMPONENT)->data; - if(!component_data->transform_component_data) return EXIT_FAILURE; + component_t *transform_component = entity_get_component(component->entity, TRANSFORM_COMPONENT); + if(!transform_component) + { + error_printf("Hitbox component require a transform component."); + return EXIT_FAILURE; + } + component_data->transform_component_data = transform_component->data; component_data->position = (fvector2d_t) { .x = 0.0f, diff --git a/src/components/physics_system.c b/src/components/physics_system.c index cc75e77..701cf40 100644 --- a/src/components/physics_system.c +++ b/src/components/physics_system.c @@ -11,9 +11,21 @@ int physics_system_init(component_t *component) { physics_system_data_t *system_data = component->data; - system_data->hitbox_component_data = entity_get_component(component->entity, HITBOX_COMPONENT)->data; - if(!system_data->hitbox_component_data) return EXIT_FAILURE; - system_data->transform_component_data = system_data->hitbox_component_data->transform_component_data; + component_t *transform_component = entity_get_component(component->entity, TRANSFORM_COMPONENT); + if(!transform_component) + { + error_printf("Physics system require a transform component."); + return EXIT_FAILURE; + } + system_data->transform_component_data = transform_component->data; + + component_t *hitbox_component = entity_get_component(component->entity, HITBOX_COMPONENT); + if(!hitbox_component) + { + error_printf("Physics system require an hitbox component."); + return EXIT_FAILURE; + } + system_data->hitbox_component_data = hitbox_component->data; system_data->target_velocity = (fvector2d_t) { .x = 0.0f, diff --git a/src/components/player_system.c b/src/components/player_system.c index 2fbffc2..9fdcb16 100644 --- a/src/components/player_system.c +++ b/src/components/player_system.c @@ -11,11 +11,29 @@ inline int player_system_init(component_t *component) { player_system_data_t *system_data = component->data; - system_data->animation_system_data = entity_get_component(component->entity, ANIMATION_SYSTEM)->data; - if(!system_data->animation_system_data) return EXIT_FAILURE; - system_data->sprite_component_data = system_data->animation_system_data->sprite_component_data; - system_data->physics_system_data = entity_get_component(component->entity, PHYSICS_SYSTEM)->data; - if(!system_data->physics_system_data) return EXIT_FAILURE; + component_t *sprite_component = entity_get_component(component->entity, SPRITE_COMPONENT); + if(!sprite_component) + { + error_printf("Player system require a sprite component."); + return EXIT_FAILURE; + } + system_data->sprite_component_data = sprite_component->data; + + component_t *animation_system = entity_get_component(component->entity, ANIMATION_SYSTEM); + if(!animation_system) + { + error_printf("Player system require an animation system."); + return EXIT_FAILURE; + } + system_data->animation_system_data = animation_system->data; + + component_t *physics_system = entity_get_component(component->entity, PHYSICS_SYSTEM); + if(!physics_system) + { + error_printf("Player system require a physics system."); + return EXIT_FAILURE; + } + system_data->physics_system_data = physics_system->data; system_data->state = PLAYER_MOVING; diff --git a/src/components/sprite_component.c b/src/components/sprite_component.c index d233250..7195eb2 100644 --- a/src/components/sprite_component.c +++ b/src/components/sprite_component.c @@ -9,16 +9,21 @@ inline int sprite_component_init(component_t *component) { sprite_component_data_t *component_data = component->data; - component_data->transform_component_data = entity_get_component(component->entity, TRANSFORM_COMPONENT)->data; - if(!component_data->transform_component_data) return EXIT_FAILURE; + component_t * transform_component = entity_get_component(component->entity, TRANSFORM_COMPONENT); + if(!transform_component) + { + error_printf("Sprite component require a transform component."); + return EXIT_FAILURE; + } + component_data->transform_component_data = transform_component->data; transform_component_data_t *transform_component_data = component_data->transform_component_data; if(sprite_component_set_texture(component_data, "dummy_sheet")) return EXIT_FAILURE; frect_to_rect(&transform_component_data->bounds, &component_data->src_rect); - component_data->src_rect.x = 0.0f; - component_data->src_rect.y = 0.0f; + component_data->src_rect.x = 0; + component_data->src_rect.y = 0; component_data->flip = false;