mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-07-04 17:40:03 +02:00
Fixed #663.
This commit is contained in:
parent
347658cdc1
commit
f8dc0f0d04
@ -71,6 +71,7 @@ private:
|
|||||||
return PARSE_STOP_VISITOR;
|
return PARSE_STOP_VISITOR;
|
||||||
}
|
}
|
||||||
parse_return ret = m_stack.consume(holder(), m_current);
|
parse_return ret = m_stack.consume(holder(), m_current);
|
||||||
|
++m_current;
|
||||||
if (ret != PARSE_CONTINUE) {
|
if (ret != PARSE_CONTINUE) {
|
||||||
off = m_current - m_start;
|
off = m_current - m_start;
|
||||||
return ret;
|
return ret;
|
||||||
@ -82,12 +83,12 @@ private:
|
|||||||
return PARSE_STOP_VISITOR;
|
return PARSE_STOP_VISITOR;
|
||||||
}
|
}
|
||||||
parse_return ret = m_stack.push(holder(), sv.type(), static_cast<uint32_t>(size));
|
parse_return ret = m_stack.push(holder(), sv.type(), static_cast<uint32_t>(size));
|
||||||
|
++m_current;
|
||||||
if (ret != PARSE_CONTINUE) {
|
if (ret != PARSE_CONTINUE) {
|
||||||
off = m_current - m_start;
|
off = m_current - m_start;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++m_current;
|
|
||||||
m_cs = MSGPACK_CS_HEADER;
|
m_cs = MSGPACK_CS_HEADER;
|
||||||
return PARSE_CONTINUE;
|
return PARSE_CONTINUE;
|
||||||
}
|
}
|
||||||
|
@ -513,3 +513,87 @@ TEST(unpack, int_off_larger_than_length)
|
|||||||
EXPECT_TRUE(thrown);
|
EXPECT_TRUE(thrown);
|
||||||
EXPECT_EQ(off, 2u);
|
EXPECT_EQ(off, 2u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(unpack, empty_array_fix)
|
||||||
|
{
|
||||||
|
std::string buf;
|
||||||
|
buf.push_back(static_cast<char>(0x90));
|
||||||
|
std::size_t off = 0;
|
||||||
|
|
||||||
|
msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off);
|
||||||
|
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
|
||||||
|
EXPECT_EQ(oh.get().via.array.size, 0u);
|
||||||
|
EXPECT_EQ(off, 1u);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(unpack, empty_array_16)
|
||||||
|
{
|
||||||
|
std::string buf;
|
||||||
|
buf.push_back(static_cast<char>(0xdc));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
std::size_t off = 0;
|
||||||
|
|
||||||
|
msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off);
|
||||||
|
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
|
||||||
|
EXPECT_EQ(oh.get().via.array.size, 0u);
|
||||||
|
EXPECT_EQ(off, 3u);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(unpack, empty_array_32)
|
||||||
|
{
|
||||||
|
std::string buf;
|
||||||
|
buf.push_back(static_cast<char>(0xdd));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
std::size_t off = 0;
|
||||||
|
|
||||||
|
msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off);
|
||||||
|
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
|
||||||
|
EXPECT_EQ(oh.get().via.array.size, 0u);
|
||||||
|
EXPECT_EQ(off, 5u);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(unpack, empty_map_fix)
|
||||||
|
{
|
||||||
|
std::string buf;
|
||||||
|
buf.push_back(static_cast<char>(0x80));
|
||||||
|
std::size_t off = 0;
|
||||||
|
|
||||||
|
msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off);
|
||||||
|
EXPECT_EQ(oh.get().type, msgpack::type::MAP);
|
||||||
|
EXPECT_EQ(oh.get().via.map.size, 0u);
|
||||||
|
EXPECT_EQ(off, 1u);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(unpack, empty_map_16)
|
||||||
|
{
|
||||||
|
std::string buf;
|
||||||
|
buf.push_back(static_cast<char>(0xde));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
std::size_t off = 0;
|
||||||
|
|
||||||
|
msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off);
|
||||||
|
EXPECT_EQ(oh.get().type, msgpack::type::MAP);
|
||||||
|
EXPECT_EQ(oh.get().via.map.size, 0u);
|
||||||
|
EXPECT_EQ(off, 3u);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(unpack, empty_map_32)
|
||||||
|
{
|
||||||
|
std::string buf;
|
||||||
|
buf.push_back(static_cast<char>(0xdf));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
buf.push_back(static_cast<char>(0x00));
|
||||||
|
std::size_t off = 0;
|
||||||
|
|
||||||
|
msgpack::object_handle oh = msgpack::unpack(buf.data(), buf.size(), off);
|
||||||
|
EXPECT_EQ(oh.get().type, msgpack::type::MAP);
|
||||||
|
EXPECT_EQ(oh.get().via.map.size, 0u);
|
||||||
|
EXPECT_EQ(off, 5u);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user