HaxeFoundation / HaxeFoundation/hashlink
ObjectMap's `find` method can get stuck in an infinite loop.
- Dominant language
- C
- Stars
- 901
- Forks
- 201
- Avg merge
- 18h 9m
- Merged PRs (30d)
- 8
Description
Part of my engine uses a Map to keep track of calls for a certain function.
```haxe
var list: Array;
var firstUpdates: Map;
function ME_StartCheck(): Void {
for (comp in list) {
if (!comp.Enabled) continue;
if (firstUpdates[comp]) continue;
comp.OnStart();
firstUpdates[comp] = true;
}
}
```
After enough calls the `find` method gets caught in an infinite loop thanks to `ckey` starting as zero and `_MNEXT(m,c)` also returning zero.
```cpp
_MSTATIC _MVAL_TYPE *_MNAME(find)( t_map *m, t_key key ) {
int c, ckey;
unsigned int hash;
if( !m->values ) return NULL;
hash = _MNAME(hash)(key);
ckey = hash % ((unsigned)m->ncells);
c = _MINDEX(m,ckey);
while( c >= 0 ) {
if( _MMATCH(c) )
return &m->values[c].value;
c = _MNEXT(m,c);
}
return NULL;
}
```
I'm not familiar enough with HashLink to come to a conclusion on how this happens. But the objects I store in the map are never iterated over or constantly changing. The map also isn't created in C, it is only interacted with via Haxe code.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.