Ce face sys.get_int_max_str_digits() și set_int_max_str_digits()
Conversia unui text cu sute de mii de cifre în int (sau invers) durează mult, iar un atacator ar putea trimite astfel de numere ca să blocheze un server. De aceea Python limitează implicit conversia la 4300 de cifre și aruncă ValueError peste limită. Calculele cu întregi mari nu sunt afectate, doar conversiile în baza 10.
set_int_max_str_digits(n) schimbă limita (0 = fără limită). Limita se poate seta și cu variabila de mediu PYTHONINTMAXSTRDIGITS.
Parametri
| Parametru | Descriere |
|---|---|
n |
Numărul maxim de cifre (cel puțin 640, sau 0). |
Ce returnează
get_*: întreg.
Exemple
Exemplul 1: Numere foarte mari
import sys
print(sys.get_int_max_str_digits())
mare = 10 ** 5000
try:
str(mare)
except ValueError as e:
print("Eroare:", str(e)[:60])
sys.set_int_max_str_digits(10_000)
print(len(str(mare)))
Rezultat
4300
Eroare: Exceeds the limit (4300 digits) for integer string conversio
5001
Greșeli frecvente
- Dezactivezi limita (
0) într-un server care primește numere de la utilizatori și îl expui la blocaje.