Skip to content

Commit e1e29de

Browse files
committed
Fix for wrong integer conversion
Fixes #405
1 parent 3b8595f commit e1e29de

2 files changed

Lines changed: 24 additions & 7 deletions

File tree

include/osmium/io/detail/pbf_input_format.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,6 @@ namespace osmium {
100100
m_input_buffer.erase(0, size);
101101
}
102102

103-
static uint32_t get_size_in_network_byte_order(const char* d) noexcept {
104-
return (static_cast<uint32_t>(d[3])) |
105-
(static_cast<uint32_t>(d[2]) << 8U) |
106-
(static_cast<uint32_t>(d[1]) << 16U) |
107-
(static_cast<uint32_t>(d[0]) << 24U);
108-
}
109-
110103
static uint32_t check_size(uint32_t size) {
111104
if (size > static_cast<uint32_t>(max_blob_header_size)) {
112105
throw osmium::pbf_error{"invalid BlobHeader size (> max_blob_header_size)"};
@@ -256,6 +249,13 @@ namespace osmium {
256249

257250
public:
258251

252+
static uint32_t get_size_in_network_byte_order(const char* d) noexcept {
253+
return (static_cast<uint32_t>(static_cast<uint8_t>(d[3]))) |
254+
(static_cast<uint32_t>(static_cast<uint8_t>(d[2])) << 8U) |
255+
(static_cast<uint32_t>(static_cast<uint8_t>(d[1])) << 16U) |
256+
(static_cast<uint32_t>(static_cast<uint8_t>(d[0])) << 24U);
257+
}
258+
259259
explicit PBFParser(parser_arguments& args) :
260260
Parser(args),
261261
m_offset_ptr(args.offset_ptr),

test/t/io/test_pbf.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
#include "utils.hpp"
44

55
#include <osmium/io/pbf_input.hpp>
6+
#include <osmium/io/detail/pbf_input_format.hpp>
67
#include <osmium/io/reader.hpp>
78
#include <osmium/osm/object.hpp>
89

10+
#include <array>
11+
912
TEST_CASE("Get supported PBF compression types") {
1013
const auto types = osmium::io::supported_pbf_compression_types();
1114
REQUIRE(types.size() >= 2);
@@ -50,3 +53,17 @@ TEST_CASE("Read PBF file with version=-1 and changeset=-1 and DenseNodes (writte
5053
REQUIRE(object.version() == 0);
5154
REQUIRE(object.changeset() == 0);
5255
}
56+
57+
TEST_CASE("get size in network byte order") {
58+
const std::array<char, 4> data1 = { 0, 0, 0, 1 };
59+
REQUIRE(osmium::io::detail::PBFParser::get_size_in_network_byte_order(data1.data()) == 1);
60+
61+
const std::array<char, 4> data127 = { 0, 0, 0, 127 };
62+
REQUIRE(osmium::io::detail::PBFParser::get_size_in_network_byte_order(data127.data()) == 127);
63+
64+
const std::array<char, 4> data128 = { 0, 0, 0, static_cast<char>(128) };
65+
REQUIRE(osmium::io::detail::PBFParser::get_size_in_network_byte_order(data128.data()) == 128);
66+
67+
const std::array<char, 4> data65535 = { 0, 0, static_cast<char>(255), static_cast<char>(255) };
68+
REQUIRE(osmium::io::detail::PBFParser::get_size_in_network_byte_order(data65535.data()) == 65535);
69+
}

0 commit comments

Comments
 (0)