Detect all overflows in BitTorrent parse_bencoding_integer.
commit721af4e749a227ac62392d3c630bbe5520efaca1
authorKalle Olavi Niemitalo <kon@iki.fi>
Sat, 26 Jan 2008 14:42:27 +0000 (26 16:42 +0200)
committerKalle Olavi Niemitalo <Kalle@Astalo.kon.iki.fi>
Sat, 26 Jan 2008 14:47:51 +0000 (26 16:47 +0200)
treed966eb058848a0f2e5404900daa077c9e77b9442
parent9699a03e744a3cb097402c9a28307c118e4afadc
Detect all overflows in BitTorrent parse_bencoding_integer.

The previous check (integer > (off_t) integer * 10) did not detect all
overflows.  Examples with 32-bit off_t:

integer = 0x1C71C71D (0x100000000/9 rounded up);
integer * 10 = 0x11C71C722, wraps to 0x1C71C722 which is > integer.

integer = 0x73333333;
integer * 10 = 0x47FFFFFFE, wraps to 0x7FFFFFFE which is > integer.

Examples with 64-bit off_t:

integer = 0x1C71C71C71C71C72 (0x10000000000000000/9 rounded up);
integer * 10 = 0x11C71C71C71C71C74, wraps to 0x1C71C71C71C71C74
which is > integer.

integer = 0x7333333333333333;
integer * 10 = 0x47FFFFFFFFFFFFFFE, wraps to 0x7FFFFFFFFFFFFFFE
which is > integer.

It is unclear to me what effect an undetected overflow would actually
have from the user's viewpoint, so I'm not adding a NEWS entry.
(cherry picked from commit a25fd18e56624cbb34c9bafec821b2c3bd0a3c28)
src/protocol/bittorrent/bencoding.c