diff --git a/src/tests/roc_fec/test_composer.cpp b/src/tests/roc_fec/test_composer.cpp index c7288e55b..631c0afcc 100644 --- a/src/tests/roc_fec/test_composer.cpp +++ b/src/tests/roc_fec/test_composer.cpp @@ -106,6 +106,27 @@ TEST(composer, align_outer_header) { == 0); } +TEST(composer, align_bad_buffer) { + enum { Alignment = 8, SliceStart = 96, OuterHeader = 3 }; + + core::BufferPtr buffer = packet_factory.new_packet_buffer(); + CHECK(buffer); + + core::Slice slice(*buffer, SliceStart, BufferSize); + CHECK(slice); + + UNSIGNED_LONGS_EQUAL(BufferSize - SliceStart, slice.size()); + UNSIGNED_LONGS_EQUAL(BufferSize - SliceStart, slice.capacity()); + + CHECK(core::AlignOps::pad_as(sizeof(RS8M_PayloadID) + OuterHeader, Alignment) + > slice.size()); + CHECK(((unsigned long)slice.data() + sizeof(RS8M_PayloadID) + OuterHeader) % Alignment + != 0); + + Composer composer(NULL, arena); + LONGS_EQUAL(status::StatusBadBuffer, composer.align(slice, OuterHeader, Alignment)); +} + TEST(composer, packet_size) { enum { Alignment = 8, PayloadSize = 10 }; @@ -126,6 +147,16 @@ TEST(composer, packet_size) { UNSIGNED_LONGS_EQUAL(sizeof(RS8M_PayloadID) + PayloadSize, packet->buffer().size()); } +TEST(composer, padding) { + enum { Padding = 8 }; + + packet::PacketPtr packet = packet_factory.new_packet(); + CHECK(packet); + + Composer composer(NULL, arena); + + LONGS_EQUAL(status::StatusBadOperation, composer.pad(*packet, Padding)); +} } // namespace fec } // namespace roc diff --git a/src/tests/roc_fec/test_composer_parser.cpp b/src/tests/roc_fec/test_composer_parser.cpp index 8e9057dfc..0c0c7cb11 100644 --- a/src/tests/roc_fec/test_composer_parser.cpp +++ b/src/tests/roc_fec/test_composer_parser.cpp @@ -308,6 +308,21 @@ TEST(composer_parser, rs8m_repair) { test_all(test); } +TEST(composer_parser, parse_bad_buffer) { + core::Slice buffer = packet_factory.new_packet_buffer(); + CHECK(buffer); + + buffer.reslice(0, sizeof(RS8M_PayloadID) - 1); + + packet::PacketPtr packet = packet_factory.new_packet(); + CHECK(packet); + packet->set_buffer(buffer); + rtp::EncodingMap rtp_encoding_map(arena); + rtp::Parser rtp_parser(NULL, rtp_encoding_map, arena); + Parser rs8m_parser(&rtp_parser, arena); + + LONGS_EQUAL(status::StatusBadPacket, rs8m_parser.parse(*packet, packet->buffer())); +} } // namespace fec } // namespace roc