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.71k stars 172 forks source link

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

Closed jixunmoe closed 3 weeks ago

jixunmoe commented 1 year 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:

dvdsk commented 4 weeks ago

does this change the current number <-> name mapping? I'm asking since that might break current url's to pasta's

jixunmoe commented 4 weeks ago

does this change the current number <-> name mapping? I'm asking since that might break current url's to pasta's

This pr does not change the mapping and I have created test to prevent it happening.

dvdsk commented 4 weeks ago

does this change the current number <-> name mapping? I'm asking since that might break current url's to pasta's

This pr does not change the mapping and I have created test to prevent it happening.

wonderfull thank you very much!