diff options
author | Riccardo Spagni <ric@spagni.net> | 2014-09-24 22:28:25 +0200 |
---|---|---|
committer | Thomas Winget <tewinget@gmail.com> | 2014-09-24 22:17:33 -0400 |
commit | 4e2b2b942daa4206ec44c66e59863670dfe3fde4 (patch) | |
tree | 1f07b2ba7a500b10b723b0ca00cbc36329844d7e /src/common/varint.h | |
parent | Merge pull request #159 (diff) | |
download | monero-4e2b2b942daa4206ec44c66e59863670dfe3fde4.tar.xz |
low risk, potentially varint overflow bug patched thanks to BBR
Diffstat (limited to 'src/common/varint.h')
-rw-r--r-- | src/common/varint.h | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/common/varint.h b/src/common/varint.h index 5a73c2746..57386597a 100644 --- a/src/common/varint.h +++ b/src/common/varint.h @@ -36,7 +36,7 @@ #include <sstream> #include <string> /*! \file varint.h - * \breif provides the implementation of varint's + * \brief provides the implementation of varint's * * The representation of varints is rather odd. The first bit of each * octet is significant, it represents wheter there is another part @@ -52,6 +52,29 @@ namespace tools { + template<typename T> + size_t get_varint_packed_size(T v) + { + if(v <= 127) + return 1; + else if(v <= 16383) + return 2; + else if(v <= 2097151) + return 3; + else if(v <= 268435455) + return 4; + else if(v <= 34359738367) + return 5; + else if(v <= 4398046511103) + return 6; + else if(v <= 4398046511103) + return 6; + else if(v <= 562949953421311) + return 7; + else + return 8; + } + /*! \brief Error codes for varint */ enum { |