From 11dbf2aab3e9a65148a40ac6b5b1124929344c1a Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 26 Apr 2016 18:10:13 +0100 Subject: Fix a bunch of compiler warnings, and turn on warnings. --- build_shared_library.py | 2 +- include/olm/base64.hh | 6 ++--- include/olm/pickle.hh | 58 +++++++++++++------------------------------------ include/olm/session.hh | 2 +- include/olm/utility.hh | 2 +- javascript/build.py | 1 + src/base64.cpp | 6 +++++ src/message.cpp | 4 ++-- src/pickle.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 83 insertions(+), 52 deletions(-) diff --git a/build_shared_library.py b/build_shared_library.py index ed8f93f..911c7b3 100755 --- a/build_shared_library.py +++ b/build_shared_library.py @@ -23,7 +23,7 @@ if not os.path.exists("build"): source_files = glob.glob("src/*.cpp") -compile_args = "g++ -O3 -Iinclude -Ilib --std=c++11 --shared -fPIC".split() +compile_args = "g++ -Wall -O3 -Iinclude -Ilib --std=c++11 --shared -fPIC".split() compile_args += source_files compile_args += sys.argv[1:] diff --git a/include/olm/base64.hh b/include/olm/base64.hh index da4641d..dfdccd0 100644 --- a/include/olm/base64.hh +++ b/include/olm/base64.hh @@ -23,11 +23,9 @@ namespace olm { /** * The number of bytes of unpadded base64 needed to encode a length of input. */ -static std::size_t encode_base64_length( +std::size_t encode_base64_length( std::size_t input_length -) { - return 4 * ((input_length + 2) / 3) + (input_length + 2) % 3 - 2; -} +); /** * Encode the raw input as unpadded base64. diff --git a/include/olm/pickle.hh b/include/olm/pickle.hh index 27f1f26..13e6b01 100644 --- a/include/olm/pickle.hh +++ b/include/olm/pickle.hh @@ -23,58 +23,38 @@ namespace olm { -static std::size_t pickle_length( +inline std::size_t pickle_length( const std::uint32_t & value ) { return 4; } - -static std::uint8_t * pickle( +std::uint8_t * pickle( std::uint8_t * pos, std::uint32_t value -) { - pos += 4; - for (unsigned i = 4; i--;) { *(--pos) = value; value >>= 8; } - return pos + 4; -} - +); -static std::uint8_t const * unpickle( +std::uint8_t const * unpickle( std::uint8_t const * pos, std::uint8_t const * end, std::uint32_t & value -) { - value = 0; - if (end - pos < 4) return end; - for (unsigned i = 4; i--;) { value <<= 8; value |= *(pos++); } - return pos; -} +); + -static std::size_t pickle_length( +inline std::size_t pickle_length( const bool & value ) { return 1; } - -static std::uint8_t * pickle( +std::uint8_t * pickle( std::uint8_t * pos, bool value -) { - *(pos++) = value ? 1 : 0; - return pos; -} - +); -static std::uint8_t const * unpickle( +std::uint8_t const * unpickle( std::uint8_t const * pos, std::uint8_t const * end, bool & value -) { - if (pos == end) return end; - value = *(pos++); - return pos; -} - +); template @@ -117,23 +97,15 @@ std::uint8_t const * unpickle( } -static std::uint8_t * pickle_bytes( +std::uint8_t * pickle_bytes( std::uint8_t * pos, std::uint8_t const * bytes, std::size_t bytes_length -) { - std::memcpy(pos, bytes, bytes_length); - return pos + bytes_length; -} - +); -static std::uint8_t const * unpickle_bytes( +std::uint8_t const * unpickle_bytes( std::uint8_t const * pos, std::uint8_t const * end, std::uint8_t * bytes, std::size_t bytes_length -) { - if (end - pos < bytes_length) return end; - std::memcpy(bytes, pos, bytes_length); - return pos + bytes_length; -} +); std::size_t pickle_length( diff --git a/include/olm/session.hh b/include/olm/session.hh index b21b0aa..829f271 100644 --- a/include/olm/session.hh +++ b/include/olm/session.hh @@ -19,7 +19,7 @@ namespace olm { -class Account; +struct Account; enum struct MessageType { PRE_KEY = 0, diff --git a/include/olm/utility.hh b/include/olm/utility.hh index 5329a59..1e77675 100644 --- a/include/olm/utility.hh +++ b/include/olm/utility.hh @@ -23,7 +23,7 @@ namespace olm { -class Ed25519PublicKey; +struct Ed25519PublicKey; struct Utility { diff --git a/javascript/build.py b/javascript/build.py index fb58a2c..f253acb 100755 --- a/javascript/build.py +++ b/javascript/build.py @@ -45,6 +45,7 @@ optimize_opts = os.environ.get("OPTIMIZE_FLAGS", "-O3") compile_args = [emcc] compile_args += optimize_opts.split() +compile_args += ["-Wall"] compile_args += """ -Iinclude -Ilib diff --git a/src/base64.cpp b/src/base64.cpp index bf8492e..66f512b 100644 --- a/src/base64.cpp +++ b/src/base64.cpp @@ -45,6 +45,12 @@ static const std::uint8_t DECODE_BASE64[128] = { } // namespace +std::size_t olm::encode_base64_length( + std::size_t input_length +) { + return 4 * ((input_length + 2) / 3) + (input_length + 2) % 3 - 2; +} + std::uint8_t * olm::encode_base64( std::uint8_t const * input, std::size_t input_length, std::uint8_t * output diff --git a/src/message.cpp b/src/message.cpp index 30abd9c..23ec823 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -136,7 +136,7 @@ static std::uint8_t const * decode( std::uint8_t const * len_start = pos; pos = varint_skip(pos, end); std::size_t len = varint_decode(len_start, pos); - if (len > end - pos) return end; + if (len + pos > end) return end; value = pos; value_length = len; pos += len; @@ -157,7 +157,7 @@ static std::uint8_t const * skip_unknown( std::uint8_t const * len_start = pos; pos = varint_skip(pos, end); std::size_t len = varint_decode(len_start, pos); - if (len > end - pos) return end; + if (len + pos > end) return end; pos += len; } else { return end; diff --git a/src/pickle.cpp b/src/pickle.cpp index 25580d2..00f7cd4 100644 --- a/src/pickle.cpp +++ b/src/pickle.cpp @@ -14,6 +14,60 @@ */ #include "olm/pickle.hh" +std::uint8_t * olm::pickle( + std::uint8_t * pos, + std::uint32_t value +) { + pos += 4; + for (unsigned i = 4; i--;) { *(--pos) = value; value >>= 8; } + return pos + 4; +} + + +std::uint8_t const * olm::unpickle( + std::uint8_t const * pos, std::uint8_t const * end, + std::uint32_t & value +) { + value = 0; + if (end < pos + 4) return end; + for (unsigned i = 4; i--;) { value <<= 8; value |= *(pos++); } + return pos; +} + +std::uint8_t * olm::pickle( + std::uint8_t * pos, + bool value +) { + *(pos++) = value ? 1 : 0; + return pos; +} + +std::uint8_t const * olm::unpickle( + std::uint8_t const * pos, std::uint8_t const * end, + bool & value +) { + if (pos == end) return end; + value = *(pos++); + return pos; +} + +std::uint8_t * olm::pickle_bytes( + std::uint8_t * pos, + std::uint8_t const * bytes, std::size_t bytes_length +) { + std::memcpy(pos, bytes, bytes_length); + return pos + bytes_length; +} + +std::uint8_t const * olm::unpickle_bytes( + std::uint8_t const * pos, std::uint8_t const * end, + std::uint8_t * bytes, std::size_t bytes_length +) { + if (end < pos + bytes_length) return end; + std::memcpy(bytes, pos, bytes_length); + return pos + bytes_length; +} + std::size_t olm::pickle_length( const olm::Curve25519PublicKey & value -- cgit v1.2.3