зеркало из https://github.com/github/putty.git
Fix buffer overrun in mp_from_decimal("").
The loop over the input string assumed it could read _one_ byte safely before reaching the initial termination test.
This commit is contained in:
Родитель
5017d0a6ca
Коммит
6e7df89316
2
mpint.c
2
mpint.c
|
@ -186,7 +186,7 @@ mp_int *mp_from_decimal_pl(ptrlen decimal)
|
|||
size_t words = bits / BIGNUM_INT_BITS + 1;
|
||||
|
||||
mp_int *x = mp_make_sized(words);
|
||||
for (size_t i = 0;; i++) {
|
||||
for (size_t i = 0; i < decimal.len; i++) {
|
||||
mp_add_integer_into(x, x, ((char *)decimal.ptr)[i] - '0');
|
||||
|
||||
if (i+1 == decimal.len)
|
||||
|
|
|
@ -155,6 +155,7 @@ class mpint(MyTestBase):
|
|||
decstr = '91596559417721901505460351493238411077414937428167'
|
||||
self.assertEqual(int(mp_from_decimal_pl(decstr)), int(decstr, 10))
|
||||
self.assertEqual(int(mp_from_decimal(decstr)), int(decstr, 10))
|
||||
self.assertEqual(int(mp_from_decimal("")), 0)
|
||||
# For hex, test both upper and lower case digits
|
||||
hexstr = 'ea7cb89f409ae845215822e37D32D0C63EC43E1381C2FF8094'
|
||||
self.assertEqual(int(mp_from_hex_pl(hexstr)), int(hexstr, 16))
|
||||
|
|
Загрузка…
Ссылка в новой задаче