szabodanika / microbin

A secure, configurable file-sharing and URL shortening web app written in Rust.
https://microbin.eu
BSD 3-Clause "New" or "Revised" License
2.51k stars 151 forks source link

fix: division by zero on 32-bit platform (#107, #118) #239

Open jixunmoe opened 7 months ago

jixunmoe commented 7 months ago

A rewrite of the animal-name to number converter functions. This is an attempt to get the program to work under 32-bit system (e.g. an armv7 device).

Also included some simple test, made before the change.

The issue was caused by ANIMAL_NAMES.len().pow(power), where power=6, overflows 32-bit integer to 0b10_0000_0000. Is this a bug in Rust? No idea. The old implementation can have issues when the number exceeds this limit.

This might also be faster (no benchs) - since we are having exactly 64 items, this can be optimized to bit-wise operations nicely by rust.

This PR should fix the following issues: