Skip to content

Bug: down() use a wrong length #10

@Incubatio

Description

@Incubatio

For some reason i had to replace some old PriorityQueue I was using in my game (for pathfinding) in favor of a new one.
I wanted something small and it's why I chose tinyQueue.

However after a simple port to another haxe, I had the lib crashing on that line:

  if (right < this.length && compare(data[right], best) < 0) {

The problem is that this.length is decremented after using _down(0), leading to a situation where _down function uses an incorrect length, resulting in data[right] being undefined and crashing the game.

Below you can see when _length get inconsistent, between the data.pop and length--:

  // from pop()
  // [...]
  const bottom = this.data.pop();
  if (this.length > 1) {
    this.data[0] = bottom;
    this._down(0);
  }
  this.length--;
  // [...]

As soon as I moved this.length--; under const bottom = this.data.pop();, problem was fixed.

Note that even if on my haxe app i get an Error, it's probable that it will be silent in JS, as:

  • JS array can access unexisting key, ex: [][-1] or [][100] will not trigger an error and will be undefined.
  • comparaison with undefined somehow works, ex: 3 < undefined is false

I'm not remotely sure if that could even be a bug in a running js app, but better be safe than sorry ;).

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions