diff options
author | MarcoFalke <falke.marco@gmail.com> | 2020-03-05 15:25:32 -0500 |
---|---|---|
committer | MarcoFalke <falke.marco@gmail.com> | 2020-03-05 15:25:36 -0500 |
commit | d7134b306a1787c2c867e6e667cb6583192cd6f5 (patch) | |
tree | cbf58f44676cebce276b03812a3b56c1b225d9c6 /src/compressor.h | |
parent | 891464950b071091ecb5166c235ef32ab2eb8bac (diff) | |
parent | 7e9c7113afbed96cef80c327cc93e82000d6bb69 (diff) |
Merge #17917: tests: Add amount compression/decompression fuzzing to existing fuzzing harness
7e9c7113afbed96cef80c327cc93e82000d6bb69 compressor: Make the domain of CompressAmount(...) explicit (practicalswift)
4a7fd7a7124f84e010b01d0769ef0572bf031ee8 tests: Add amount compression/decompression fuzzing to existing fuzzing harness: test compression round-trip (practicalswift)
Pull request description:
Small fuzzing improvement:
Add amount compression/decompression fuzzing to existing fuzzing harness: test compression round-trip (`DecompressAmount(CompressAmount(…))`).
Make the domain of `CompressAmount(…)` explicit.
Amount compression primer:
```
Compact serialization for amounts
Special serializer/deserializer for amount values. It is optimized for
values which have few non-zero digits in decimal representation. Most
amounts currently in the txout set take only 1 or 2 bytes to
represent.
```
**How to test this PR**
```
$ make distclean
$ ./autogen.sh
$ CC=clang CXX=clang++ ./configure --enable-fuzz \
--with-sanitizers=address,fuzzer,undefined
$ make
$ src/test/fuzz/integer
…
```
Top commit has no ACKs.
Tree-SHA512: 0f7c05b97012ccd5cd05a96c209e6b4d7d2fa73138bac9615cf531baa3f614f9003e29a198015bcc083af9f5bdc752bb52615b82c5df3c519b1a064bd4fc6664
Diffstat (limited to 'src/compressor.h')
-rw-r--r-- | src/compressor.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/compressor.h b/src/compressor.h index 7bb60d311e..223603e7e9 100644 --- a/src/compressor.h +++ b/src/compressor.h @@ -15,7 +15,17 @@ bool CompressScript(const CScript& script, std::vector<unsigned char> &out); unsigned int GetSpecialScriptSize(unsigned int nSize); bool DecompressScript(CScript& script, unsigned int nSize, const std::vector<unsigned char> &out); +/** + * Compress amount. + * + * nAmount is of type uint64_t and thus cannot be negative. If you're passing in + * a CAmount (int64_t), make sure to properly handle the case where the amount + * is negative before calling CompressAmount(...). + * + * @pre Function defined only for 0 <= nAmount <= MAX_MONEY. + */ uint64_t CompressAmount(uint64_t nAmount); + uint64_t DecompressAmount(uint64_t nAmount); /** Compact serializer for scripts. |