bevy/crates/bevy_ecs/src
Giacomo Stevanato 89c3a979e6
Prevent TOCTOU bugs in ComponentsQueuedRegistrator (#20016)
# Objective

- Fix #20014

## Solution

- Don't make the `force_register_` family of functions always enqueue of
the component/resource; instead have them check again whether it was
already queued or not.

## Testing

- I added a small regression test but it's non-deterministic: if the bug
is fixed it will always pass, but if the bug is presen then it has a
(hopefully small) chance of passing. On my PC it failed after ~100
iterations, so hopefully 1000 is enough in CI (assuming it doesn't have
single core runners...)

---------

Co-authored-by: JaySpruce <jsprucebruce@gmail.com>
2025-07-14 20:41:18 +00:00
..
bundle Split bundle.rs (#20088) 2025-07-14 18:13:51 +00:00
component Prevent TOCTOU bugs in ComponentsQueuedRegistrator (#20016) 2025-07-14 20:41:18 +00:00
entity Friendlier Entity Debug impl (#20045) 2025-07-09 19:15:37 +00:00
error Don't create errors for ignored failed commands (#19718) 2025-06-29 16:34:20 +00:00
event Rename send_event and similar methods to write_event (#20017) 2025-07-07 22:05:16 +00:00
observer Observer trigger refactor (#19935) 2025-07-04 16:27:21 +00:00
query Have System::run_unsafe return Result. (#19145) 2025-07-03 21:48:09 +00:00
reflect ECS: put strings only used for debug behind a feature (#19558) 2025-06-18 20:15:25 +00:00
relationship Avoid early function invocation in EntityEntryCommands (#19978) 2025-07-07 20:02:55 +00:00
schedule Remove SystemSetNode (#20100) 2025-07-13 17:25:46 +00:00
storage Bump typos to 1.34.0 (#20013) 2025-07-07 20:15:06 +00:00
system Rename send_event and similar methods to write_event (#20017) 2025-07-07 22:05:16 +00:00
world Rename send_event and similar methods to write_event (#20017) 2025-07-07 22:05:16 +00:00
archetype.rs Bump typos to 1.34.0 (#20013) 2025-07-07 20:15:06 +00:00
batching.rs Nonmax all rows (#19132) 2025-05-26 17:39:55 +00:00
change_detection.rs Have System::run_unsafe return Result. (#19145) 2025-07-03 21:48:09 +00:00
entity_disabling.rs bevy_reflect: Add clone registrations project-wide (#18307) 2025-03-17 18:32:35 +00:00
hierarchy.rs Add parent ID to the B0004 log message (#19980) 2025-07-07 20:04:59 +00:00
intern.rs Rename bevy_platform_support to bevy_platform (#18813) 2025-04-11 23:13:28 +00:00
label.rs Remove upcasting methods + Cleanup interned label code (#18984) 2025-05-26 15:38:12 +00:00
lib.rs Prevent TOCTOU bugs in ComponentsQueuedRegistrator (#20016) 2025-07-14 20:41:18 +00:00
lifecycle.rs Rename send_event and similar methods to write_event (#20017) 2025-07-07 22:05:16 +00:00
name.rs Add newlines before impl blocks (#19746) 2025-06-22 23:07:02 +00:00
never.rs Use never_say_never hack to work around Rust 2024 regression for fn traits (#18804) 2025-04-14 19:59:48 +00:00
resource.rs refactor(utils): move SyncCell and SyncUnsafeCell to bevy_platform (#19305) 2025-05-27 04:57:26 +00:00
spawn.rs Remove Bundle::register_required_components (#19967) 2025-07-06 18:15:28 +00:00
traversal.rs Let query items borrow from query state to avoid needing to clone (#15396) 2025-06-16 21:05:41 +00:00