soimy / maxrects-packer

A max rectangle 2d bin packer npm-module for packing glyphs or images into multiple sprite-sheet/atlas

Home Page:https://soimy.github.io/maxrects-packer/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

System hang

avaer opened this issue · comments

This repro will completely hang the library until it crashes:

const maxRectsPacker = new MaxRectsPacker(512, 512, {
          padding: 1,
          // exclusiveTag: false,
        });
        const rects2 = [
          {
            width: 512,
            height: 512,
          },
          {
            width: 512,
            height: 512,
          },
        ];
        for (const rect of rects2) {
          maxRectsPacker.add(rect);  
        }

As far as I understand, this should set oversized flags but bail out. Instead it just loops forever doing some sort of placement/freeing procedure.

This makes the library dangerous to use in any situation where the input sizes can be user-controlled, since it risks total application hang.

If you pause you can get a sense of the infinite loop.

image

Might be related to #28.

Tested on 2.7.3