Tree:
cd1fc2434c
0.10
0.13
0.14
0.15
0.16
0.16.3-insta
0.8
add-dnsseed-keva-one
add-kex-keva-one-dns
cn
cn_merge
cn_mining
fix-qt-dpi-warning
idb-fix
inlude-qpainterpath
issue_19
jw-dev
keva-gui
kevaview
kvazar
main
master
mz_test
rx
update-boost-1-74
validate-key-value-lenght
views
wsl
zmq
0.16.6.0-rc1
0.8.3.7-cc
kvazar-1.0.0
kvazar-1.0.1
kvazar-1.1.0
kvazar-1.1.1
v0.1.5
v0.1.6test1
v0.10-mark12
v0.10.0
v0.10.0.2
v0.10.0rc1
v0.10.0rc2
v0.10.0rc3
v0.10.0rc4
v0.10.1
v0.10.1.1
v0.10.1.2
v0.10.1.2-osxsign3
v0.10.1.3
v0.10.1rc1
v0.10.1rc2
v0.10.1rc3
v0.10.2
v0.10.2.1
v0.10.2.2
v0.10.2rc1
v0.10.3.0rc1
v0.10.3rc1
v0.10.4.0
v0.10.4.0rc1
v0.13.2
v0.13.2.1
v0.13.2rc1
v0.13.2rc2
v0.13.2rc3
v0.13.3
v0.13.3rc1
v0.13.3rc2
v0.14.2
v0.14.2rc1
v0.14.2rc2
v0.15.0.1rc1
v0.15.1
v0.15.1rc1
v0.16.0
v0.16.0rc1
v0.16.2
v0.16.2rc1
v0.16.3
v0.16.3-rc1
v0.16.3-rc2
v0.16.3-rc3
v0.16.3-rc7
v0.16.3-rc8
v0.16.3.1
v0.16.4
v0.16.5
v0.16.5.1
v0.16.5.2
v0.16.5.3
v0.16.6.0
v0.16.7.0
v0.16.8.0
v0.2.0
v0.2.10
v0.2.11
v0.2.12
v0.2.13
v0.2.2
v0.2.4
v0.2.5
v0.2.6
v0.2.7
v0.2.8
v0.2.9
v0.2rc2
v0.3.0
v0.3.1
v0.3.10
v0.3.11_notexact
v0.3.12
v0.3.13
v0.3.14
v0.3.15
v0.3.17
v0.3.18
v0.3.19
v0.3.1rc1
v0.3.2
v0.3.20
v0.3.20.01_closest
v0.3.20.2_closest
v0.3.21
v0.3.21rc
v0.3.22
v0.3.22rc1
v0.3.22rc2
v0.3.22rc3
v0.3.22rc4
v0.3.22rc5
v0.3.22rc6
v0.3.23
v0.3.23rc1
v0.3.24
v0.3.24rc1
v0.3.24rc2
v0.3.24rc3
v0.3.3
v0.3.6
v0.3.7
v0.3.8
v0.3rc1
v0.3rc2
v0.3rc4
v0.4.0
v0.4.00rc1
v0.4.00rc2
v0.5.0
v0.5.0rc1
v0.5.0rc2
v0.5.0rc3
v0.5.0rc4
v0.5.0rc5
v0.5.0rc6
v0.5.0rc7
v0.5.1
v0.5.1rc1
v0.5.1rc2
v0.5.2
v0.5.3
v0.5.3rc4
v0.6.0
v0.6.0rc1
v0.6.0rc2
v0.6.0rc3
v0.6.0rc4
v0.6.0rc5
v0.6.0rc6
v0.6.1
v0.6.1rc1
v0.6.1rc2
v0.6.2
v0.6.2.1
v0.6.2.2
v0.6.3
v0.6.3a
v0.6.3b
v0.6.3c
v0.6.3rc1
v0.6.9
v0.6.9.1
v0.6.9.2
v0.7.0
v0.7.0rc1
v0.7.0rc2
v0.7.0rc3
v0.7.1
v0.7.1rc1
v0.7.2
v0.7.2rc2
v0.8.0
v0.8.0rc1
v0.8.1
v0.8.2
v0.8.2.3
v0.8.2rc1
v0.8.2rc2
v0.8.2rc3
v0.8.3
v0.8.3.1
v0.8.3.2
v0.8.3.3
v0.8.3.4
v0.8.3.5
v0.8.3.6
v0.8.3.7
v0.8.3.7-cc
v0.8.3.7-ccsec
v0.8.4
v0.8.4.1
v0.8.4.1-cc
v0.8.4.1-ccsec
v0.8.4.1-omg1
v0.8.4.1-sse2test
v0.8.4rc1
v0.8.4rc2
v0.8.5
v0.8.5-nodebloom
v0.8.5.1
v0.8.5.1-macosx
v0.8.5.1-omg1
v0.8.5.1-omg2
v0.8.5.1-omgscrypt
v0.8.5.2-rc1
v0.8.5.2-rc2
v0.8.5.2-rc3
v0.8.5.2-rc4
v0.8.5.2-rc4-detect
v0.8.5.2-rc5
v0.8.5.2-rc6
v0.8.5.2rc1
v0.8.5.3-rc1
v0.8.5.3-rc2
v0.8.5.3-rc3
v0.8.5.3-rc4
v0.8.5.3-rc4-no-mmap
v0.8.5.3-rc5
v0.8.5.3-rc6
v0.8.5.3-rc7
v0.8.5.3-rc8
v0.8.6.1
v0.8.6.2
v0.8.6.3-mark2
v0.8.6.9
v0.8.7.1
v0.8.7.2
v0.8.7.3
v0.8.7.4
v0.8.7.5
v0.9.0rc1
v0.9.0rc2
v0.9.2
v0.9.2.1
v0.9.2rc1
v0.9.2rc2
v0.9.3
v0.9.3-preview4
v0.9.3-preview5
v0.9.3rc1
v0.9.3rc2
v0.9.4
${ noResults }
3 Commits (cd1fc2434ce80f50242e41b5e675f6d0b36045ad)
Author | SHA1 | Message | Date |
---|---|---|---|
Gavin Andresen | 8dc206a1e2 |
Reject non-canonically-encoded sizes
The length of vectors, maps, sets, etc are serialized using Write/ReadCompactSize -- which, unfortunately, do not use a unique encoding. So deserializing and then re-serializing a transaction (for example) can give you different bits than you started with. That doesn't cause any problems that we are aware of, but it is exactly the type of subtle mismatch that can lead to exploits. With this pull, reading a non-canonical CompactSize throws an exception, which means nodes will ignore 'tx' or 'block' or other messages that are not properly encoded. Please check my logic... but this change is safe with respect to causing a network split. Old clients that receive non-canonically-encoded transactions or blocks deserialize them into CTransaction/CBlock structures in memory, and then re-serialize them before relaying them to peers. And please check my logic with respect to causing a blockchain split: there are no CompactSize fields in the block header, so the block hash is always canonical. The merkle root in the block header is computed on a vector<CTransaction>, so any non-canonical encoding of the transactions in 'tx' or 'block' messages is erased as they are read into memory by old clients, and does not affect the block hash. And, as noted above, old clients re-serialize (with canonical encoding) 'tx' and 'block' messages before relaying to peers. |
11 years ago |
Gavin Andresen | 87b9931bed |
Fix signed/unsigned comparison warnings
|
12 years ago |
Pieter Wuille | 4d6144f97f |
Compact serialization for variable-length integers
Variable-length integers: bytes are a MSB base-128 encoding of the number. The high bit in each byte signifies whether another digit follows. To make the encoding is one-to-one, one is subtracted from all but the last digit. Thus, the byte sequence a[] with length len, where all but the last byte has bit 128 set, encodes the number: (a[len-1] & 0x7F) + sum(i=1..len-1, 128^i*((a[len-i-1] & 0x7F)+1)) Properties: * Very small (0-127: 1 byte, 128-16511: 2 bytes, 16512-2113663: 3 bytes) * Every integer has exactly one encoding * Encoding does not depend on size of original integer type |
12 years ago |