Twinside / Juicy.Pixels

Haskell library to load & save pictures
BSD 3-Clause "New" or "Revised" License
238 stars 57 forks source link

Infinite loop in palettize #213

Open Fabus1184 opened 1 year ago

Fabus1184 commented 1 year ago

In the palettize function when the PaletteCreationMode Uniform is used, in the corresponding function uniformQuantization when maxCols is less than 8 this causes bitDiv3 to return 0 as at least one element of the tuple (bg, br, bb) which then causes the corresponding list to evaluate to [0, 0 .. 255] which will never terminate.

https://github.com/Twinside/Juicy.Pixels/blob/8b1644255fb5dbe680dff352cf9114a2ce1903ef/src/Codec/Picture/ColorQuant.hs#L157-L173

In my case, this causes the program to use 100% of the CPU filling up the RAM until the system hangs.

If values of less than 8 are not considered valid then this should be at least mentioned in the documentation or there should be a check of some sort.