game engines/web frameworks: 27 CWE-407 defects + 3 CLEAN; 194 sites, 78 ecosystems
This commit is contained in:
parent
547a9f5738
commit
4d3fcc8e73
76 changed files with 6216 additions and 17 deletions
64
defects/sdl3/patch/sdl3-0001-mapping-change-hash-set.patch
Normal file
64
defects/sdl3/patch/sdl3-0001-mapping-change-hash-set.patch
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
--- a/src/joystick/SDL_gamepad.c
|
||||
+++ b/src/joystick/SDL_gamepad.c
|
||||
@@ -108,6 +108,7 @@ typedef struct
|
||||
{
|
||||
int refcount _guarded;
|
||||
SDL_JoystickID *joysticks _guarded;
|
||||
GamepadMapping_t **joystick_mappings _guarded;
|
||||
int num_changed_mappings _guarded;
|
||||
GamepadMapping_t **changed_mappings _guarded;
|
||||
+ SDL_HashTable *changed_mappings_set _guarded; // O(1) pointer membership
|
||||
} MappingChangeTracker;
|
||||
|
||||
@@ -595,6 +596,11 @@ static void PushMappingChangeTracking(void)
|
||||
s_mappingChangeTracker = (MappingChangeTracker *)SDL_calloc(1, sizeof(*tracker));
|
||||
...
|
||||
+ tracker->changed_mappings_set = SDL_CreateHashTable(
|
||||
+ 0, false, SDL_HashPointer, SDL_KeyMatchPointer, NULL, NULL);
|
||||
|
||||
@@ -627,6 +633,10 @@ static void AddMappingChangeTracking(GamepadMapping_t *mapping)
|
||||
tracker->changed_mappings[num_mappings] = mapping;
|
||||
tracker->num_changed_mappings = (num_mappings + 1);
|
||||
}
|
||||
+ // Mirror into hash set for O(1) HasMappingChangeTracking queries.
|
||||
+ if (tracker->changed_mappings_set) {
|
||||
+ SDL_InsertIntoHashTable(tracker->changed_mappings_set,
|
||||
+ (void *)mapping, (const void *)true, false);
|
||||
+ }
|
||||
}
|
||||
|
||||
@@ -639,13 +639,10 @@ static bool HasMappingChangeTracking(MappingChangeTracker *tracker, GamepadMappi
|
||||
{
|
||||
- int i;
|
||||
-
|
||||
SDL_AssertJoysticksLocked();
|
||||
|
||||
- for (i = 0; i < tracker->num_changed_mappings; ++i) {
|
||||
- if (tracker->changed_mappings[i] == mapping) {
|
||||
- return true;
|
||||
- }
|
||||
- }
|
||||
- return false;
|
||||
+ if (!tracker->changed_mappings_set) {
|
||||
+ // Fallback: linear scan (allocation failure path).
|
||||
+ int i;
|
||||
+ for (i = 0; i < tracker->num_changed_mappings; ++i) {
|
||||
+ if (tracker->changed_mappings[i] == mapping) {
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+ const void *value;
|
||||
+ return SDL_FindInHashTable(tracker->changed_mappings_set, (void *)mapping, &value);
|
||||
}
|
||||
|
||||
@@ -698,6 +698,10 @@ static void PopMappingChangeTracking(void)
|
||||
SDL_free(tracker->joysticks);
|
||||
SDL_free(tracker->joystick_mappings);
|
||||
SDL_free(tracker->changed_mappings);
|
||||
+ if (tracker->changed_mappings_set) {
|
||||
+ SDL_DestroyHashTable(tracker->changed_mappings_set);
|
||||
+ }
|
||||
SDL_free(tracker);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue