Skip to content

Commit

Permalink
Merge pull request #755 from redboltz/fix_754
Browse files Browse the repository at this point in the history
Fixed #754.
  • Loading branch information
redboltz committed Jan 8, 2019
2 parents 27cf578 + 709d6f4 commit 084db3f
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 3 deletions.
6 changes: 3 additions & 3 deletions include/msgpack/v1/object.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -352,8 +352,8 @@ struct object_pack_visitor {
return true;
}
bool visit_ext(const char* v, uint32_t size) {
m_packer.pack_ext(size, *v);
m_packer.pack_ext_body(v, size);
m_packer.pack_ext(size - 1, *v);
m_packer.pack_ext_body(v + 1, size - 1);
return true;
}
bool start_array(uint32_t num_elements) {
Expand Down Expand Up @@ -938,7 +938,7 @@ struct object_equal_visitor {
}
bool visit_ext(const char* v, uint32_t size) {
if (m_ptr->type != msgpack::type::EXT ||
m_ptr->via.ext.size != size ||
m_ptr->via.ext.size != size - 1 ||
std::memcmp(m_ptr->via.ext.ptr, v, size) != 0) {
m_result = false;
return false;
Expand Down
98 changes: 98 additions & 0 deletions test/msgpack_basic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,16 @@ TEST(MSGPACK, simple_buffer_fixext1)
EXPECT_EQ(1ul, oh.get().via.ext.size);
EXPECT_EQ(1, oh.get().via.ext.type());
EXPECT_EQ(2, oh.get().via.ext.data()[0]);

msgpack::sbuffer sbuf2;
msgpack::pack(sbuf2, oh.get());
msgpack::object_handle oh2 =
msgpack::unpack(sbuf2.data(), sbuf2.size());
EXPECT_EQ(1ul, oh2.get().via.ext.size);
EXPECT_EQ(1, oh2.get().via.ext.type());
EXPECT_EQ(2, oh2.get().via.ext.data()[0]);

EXPECT_EQ(oh.get(), oh2.get());
}

TEST(MSGPACK, simple_buffer_fixext2)
Expand All @@ -347,6 +357,17 @@ TEST(MSGPACK, simple_buffer_fixext2)
EXPECT_EQ(0, oh.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh.get().via.ext.data()));

msgpack::sbuffer sbuf2;
msgpack::pack(sbuf2, oh.get());
msgpack::object_handle oh2 =
msgpack::unpack(sbuf2.data(), sbuf2.size());
EXPECT_EQ(2ul, oh2.get().via.ext.size);
EXPECT_EQ(0, oh2.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh2.get().via.ext.data()));

EXPECT_EQ(oh.get(), oh2.get());
}

TEST(MSGPACK, simple_buffer_fixext4)
Expand All @@ -363,6 +384,17 @@ TEST(MSGPACK, simple_buffer_fixext4)
EXPECT_EQ(1, oh.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh.get().via.ext.data()));

msgpack::sbuffer sbuf2;
msgpack::pack(sbuf2, oh.get());
msgpack::object_handle oh2 =
msgpack::unpack(sbuf2.data(), sbuf2.size());
EXPECT_EQ(4ul, oh2.get().via.ext.size);
EXPECT_EQ(1, oh2.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh2.get().via.ext.data()));

EXPECT_EQ(oh.get(), oh2.get());
}

TEST(MSGPACK, simple_buffer_fixext8)
Expand All @@ -379,6 +411,17 @@ TEST(MSGPACK, simple_buffer_fixext8)
EXPECT_EQ(1, oh.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh.get().via.ext.data()));

msgpack::sbuffer sbuf2;
msgpack::pack(sbuf2, oh.get());
msgpack::object_handle oh2 =
msgpack::unpack(sbuf2.data(), sbuf2.size());
EXPECT_EQ(8ul, oh2.get().via.ext.size);
EXPECT_EQ(1, oh2.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh2.get().via.ext.data()));

EXPECT_EQ(oh.get(), oh2.get());
}

TEST(MSGPACK, simple_buffer_fixext16)
Expand All @@ -395,6 +438,17 @@ TEST(MSGPACK, simple_buffer_fixext16)
EXPECT_EQ(1, oh.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh.get().via.ext.data()));

msgpack::sbuffer sbuf2;
msgpack::pack(sbuf2, oh.get());
msgpack::object_handle oh2 =
msgpack::unpack(sbuf2.data(), sbuf2.size());
EXPECT_EQ(16ul, oh2.get().via.ext.size);
EXPECT_EQ(1, oh2.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh2.get().via.ext.data()));

EXPECT_EQ(oh.get(), oh2.get());
}

TEST(MSGPACK, simple_buffer_fixext_1byte_0)
Expand Down Expand Up @@ -426,6 +480,17 @@ TEST(MSGPACK, simple_buffer_fixext_1byte_255)
EXPECT_EQ(77, oh.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh.get().via.ext.data()));

msgpack::sbuffer sbuf2;
msgpack::pack(sbuf2, oh.get());
msgpack::object_handle oh2 =
msgpack::unpack(sbuf2.data(), sbuf2.size());
EXPECT_EQ(size, oh2.get().via.ext.size);
EXPECT_EQ(77, oh2.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh2.get().via.ext.data()));

EXPECT_EQ(oh.get(), oh2.get());
}

TEST(MSGPACK, simple_buffer_fixext_2byte_256)
Expand All @@ -444,6 +509,17 @@ TEST(MSGPACK, simple_buffer_fixext_2byte_256)
EXPECT_EQ(77, oh.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh.get().via.ext.data()));

msgpack::sbuffer sbuf2;
msgpack::pack(sbuf2, oh.get());
msgpack::object_handle oh2 =
msgpack::unpack(sbuf2.data(), sbuf2.size());
EXPECT_EQ(size, oh2.get().via.ext.size);
EXPECT_EQ(77, oh2.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh2.get().via.ext.data()));

EXPECT_EQ(oh.get(), oh2.get());
}

TEST(MSGPACK, simple_buffer_fixext_2byte_65535)
Expand All @@ -462,6 +538,17 @@ TEST(MSGPACK, simple_buffer_fixext_2byte_65535)
EXPECT_EQ(77, oh.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh.get().via.ext.data()));

msgpack::sbuffer sbuf2;
msgpack::pack(sbuf2, oh.get());
msgpack::object_handle oh2 =
msgpack::unpack(sbuf2.data(), sbuf2.size());
EXPECT_EQ(size, oh2.get().via.ext.size);
EXPECT_EQ(77, oh2.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh2.get().via.ext.data()));

EXPECT_EQ(oh.get(), oh2.get());
}

TEST(MSGPACK, simple_buffer_fixext_4byte_65536)
Expand All @@ -480,6 +567,17 @@ TEST(MSGPACK, simple_buffer_fixext_4byte_65536)
EXPECT_EQ(77, oh.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh.get().via.ext.data()));

msgpack::sbuffer sbuf2;
msgpack::pack(sbuf2, oh.get());
msgpack::object_handle oh2 =
msgpack::unpack(sbuf2.data(), sbuf2.size());
EXPECT_EQ(size, oh2.get().via.ext.size);
EXPECT_EQ(77, oh2.get().via.ext.type());
EXPECT_TRUE(
std::equal(buf, buf + sizeof(buf), oh2.get().via.ext.data()));

EXPECT_EQ(oh.get(), oh2.get());
}

TEST(MSGPACK, simple_buffer_ext_convert)
Expand Down

0 comments on commit 084db3f

Please sign in to comment.