Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc

Issue 2060943009: Reland Fix crash parsing malformed rtp packet (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_packet.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h" 10 #include "webrtc/modules/rtp_rtcp/source/rtp_packet_received.h"
(...skipping 13 matching lines...) Expand all
24 constexpr int8_t kPayloadType = 100; 24 constexpr int8_t kPayloadType = 100;
25 constexpr uint32_t kSsrc = 0x12345678; 25 constexpr uint32_t kSsrc = 0x12345678;
26 constexpr uint16_t kSeqNum = 88; 26 constexpr uint16_t kSeqNum = 88;
27 constexpr uint32_t kTimestamp = 0x65431278; 27 constexpr uint32_t kTimestamp = 0x65431278;
28 constexpr uint8_t kTransmissionOffsetExtensionId = 1; 28 constexpr uint8_t kTransmissionOffsetExtensionId = 1;
29 constexpr uint8_t kAudioLevelExtensionId = 9; 29 constexpr uint8_t kAudioLevelExtensionId = 9;
30 constexpr int32_t kTimeOffset = 0x56ce; 30 constexpr int32_t kTimeOffset = 0x56ce;
31 constexpr bool kVoiceActive = true; 31 constexpr bool kVoiceActive = true;
32 constexpr uint8_t kAudioLevel = 0x5a; 32 constexpr uint8_t kAudioLevel = 0x5a;
33 constexpr size_t kMaxPaddingSize = 224u; 33 constexpr size_t kMaxPaddingSize = 224u;
34 // clang-format off
34 constexpr uint8_t kMinimumPacket[] = { 35 constexpr uint8_t kMinimumPacket[] = {
35 0x80, kPayloadType, 0x00, kSeqNum, 36 0x80, kPayloadType, 0x00, kSeqNum,
36 0x65, 0x43, 0x12, 0x78, 37 0x65, 0x43, 0x12, 0x78,
37 0x12, 0x34, 0x56, 0x78}; 38 0x12, 0x34, 0x56, 0x78};
38 constexpr uint8_t kPacketWithTO[] = { 39 constexpr uint8_t kPacketWithTO[] = {
39 0x90, kPayloadType, 0x00, kSeqNum, 40 0x90, kPayloadType, 0x00, kSeqNum,
40 0x65, 0x43, 0x12, 0x78, 41 0x65, 0x43, 0x12, 0x78,
41 0x12, 0x34, 0x56, 0x78, 42 0x12, 0x34, 0x56, 0x78,
42 0xbe, 0xde, 0x00, 0x01, 43 0xbe, 0xde, 0x00, 0x01,
43 0x12, 0x00, 0x56, 0xce}; 44 0x12, 0x00, 0x56, 0xce};
(...skipping 13 matching lines...) Expand all
57 0xb2, kPayloadType, 0x00, kSeqNum, 58 0xb2, kPayloadType, 0x00, kSeqNum,
58 0x65, 0x43, 0x12, 0x78, 59 0x65, 0x43, 0x12, 0x78,
59 0x12, 0x34, 0x56, 0x78, 60 0x12, 0x34, 0x56, 0x78,
60 0x34, 0x56, 0x78, 0x90, 61 0x34, 0x56, 0x78, 0x90,
61 0x32, 0x43, 0x54, 0x65, 62 0x32, 0x43, 0x54, 0x65,
62 0xbe, 0xde, 0x00, 0x01, 63 0xbe, 0xde, 0x00, 0x01,
63 0x12, 0x00, 0x56, 0xce, 64 0x12, 0x00, 0x56, 0xce,
64 'p', 'a', 'y', 'l', 'o', 'a', 'd', 65 'p', 'a', 'y', 'l', 'o', 'a', 'd',
65 'p', 'a', 'd', 'd', 'i', 'n', 'g', kPacketPaddingSize}; 66 'p', 'a', 'd', 'd', 'i', 'n', 'g', kPacketPaddingSize};
66 67
68 constexpr uint8_t kPacketWithInvalidExtension[] = {
69 0x90, kPayloadType, 0x00, kSeqNum,
70 0x65, 0x43, 0x12, 0x78, // kTimestamp.
71 0x12, 0x34, 0x56, 0x78, // kSSrc.
72 0xbe, 0xde, 0x00, 0x02, // Extension block of size 2 x 32bit words.
73 (kTransmissionOffsetExtensionId << 4) | 6, // (6+1)-byte extension, but
74 'e', 'x', 't', // Transmission Offset
75 'd', 'a', 't', 'a', // expected to be 3-bytes.
76 'p', 'a', 'y', 'l', 'o', 'a', 'd'
77 };
78 // clang-format on
67 } // namespace 79 } // namespace
68 80
69 TEST(RtpPacketTest, CreateMinimum) { 81 TEST(RtpPacketTest, CreateMinimum) {
70 RtpPacketToSend packet(nullptr); 82 RtpPacketToSend packet(nullptr);
71 packet.SetPayloadType(kPayloadType); 83 packet.SetPayloadType(kPayloadType);
72 packet.SetSequenceNumber(kSeqNum); 84 packet.SetSequenceNumber(kSeqNum);
73 packet.SetTimestamp(kTimestamp); 85 packet.SetTimestamp(kTimestamp);
74 packet.SetSsrc(kSsrc); 86 packet.SetSsrc(kSsrc);
75 EXPECT_THAT(kMinimumPacket, ElementsAreArray(packet.data(), packet.size())); 87 EXPECT_THAT(kMinimumPacket, ElementsAreArray(packet.data(), packet.size()));
76 } 88 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 EXPECT_EQ(kSeqNum, packet.SequenceNumber()); 198 EXPECT_EQ(kSeqNum, packet.SequenceNumber());
187 EXPECT_EQ(kTimestamp, packet.Timestamp()); 199 EXPECT_EQ(kTimestamp, packet.Timestamp());
188 EXPECT_EQ(kSsrc, packet.Ssrc()); 200 EXPECT_EQ(kSsrc, packet.Ssrc());
189 int32_t time_offset; 201 int32_t time_offset;
190 EXPECT_TRUE(packet.GetExtension<TransmissionOffset>(&time_offset)); 202 EXPECT_TRUE(packet.GetExtension<TransmissionOffset>(&time_offset));
191 EXPECT_EQ(kTimeOffset, time_offset); 203 EXPECT_EQ(kTimeOffset, time_offset);
192 EXPECT_EQ(0u, packet.payload_size()); 204 EXPECT_EQ(0u, packet.payload_size());
193 EXPECT_EQ(0u, packet.padding_size()); 205 EXPECT_EQ(0u, packet.padding_size());
194 } 206 }
195 207
208 TEST(RtpPacketTest, ParseWithInvalidSizedExtension) {
209 RtpPacketToSend::ExtensionManager extensions;
210 extensions.Register(kRtpExtensionTransmissionTimeOffset,
211 kTransmissionOffsetExtensionId);
212
213 RtpPacketReceived packet(&extensions);
214 EXPECT_TRUE(packet.Parse(kPacketWithInvalidExtension,
215 sizeof(kPacketWithInvalidExtension)));
216
217 // Extension should be ignored.
218 int32_t time_offset;
219 EXPECT_FALSE(packet.GetExtension<TransmissionOffset>(&time_offset));
220
221 // But shouldn't prevent reading payload.
222 EXPECT_THAT(make_tuple(packet.payload(), packet.payload_size()),
223 ElementsAreArray(kPayload));
224 }
225
196 TEST(RtpPacketTest, ParseWith2Extensions) { 226 TEST(RtpPacketTest, ParseWith2Extensions) {
197 RtpPacketToSend::ExtensionManager extensions; 227 RtpPacketToSend::ExtensionManager extensions;
198 extensions.Register(kRtpExtensionTransmissionTimeOffset, 228 extensions.Register(kRtpExtensionTransmissionTimeOffset,
199 kTransmissionOffsetExtensionId); 229 kTransmissionOffsetExtensionId);
200 extensions.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId); 230 extensions.Register(kRtpExtensionAudioLevel, kAudioLevelExtensionId);
201 RtpPacketReceived packet(&extensions); 231 RtpPacketReceived packet(&extensions);
202 EXPECT_TRUE(packet.Parse(kPacketWithTOAndAL, sizeof(kPacketWithTOAndAL))); 232 EXPECT_TRUE(packet.Parse(kPacketWithTOAndAL, sizeof(kPacketWithTOAndAL)));
203 int32_t time_offset; 233 int32_t time_offset;
204 EXPECT_TRUE(packet.GetExtension<TransmissionOffset>(&time_offset)); 234 EXPECT_TRUE(packet.GetExtension<TransmissionOffset>(&time_offset));
205 EXPECT_EQ(kTimeOffset, time_offset); 235 EXPECT_EQ(kTimeOffset, time_offset);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 int32_t time_offset; 273 int32_t time_offset;
244 EXPECT_FALSE(packet.GetExtension<TransmissionOffset>(&time_offset)); 274 EXPECT_FALSE(packet.GetExtension<TransmissionOffset>(&time_offset));
245 packet.IdentifyExtensions(&extensions); 275 packet.IdentifyExtensions(&extensions);
246 EXPECT_TRUE(packet.GetExtension<TransmissionOffset>(&time_offset)); 276 EXPECT_TRUE(packet.GetExtension<TransmissionOffset>(&time_offset));
247 EXPECT_EQ(kTimeOffset, time_offset); 277 EXPECT_EQ(kTimeOffset, time_offset);
248 EXPECT_EQ(0u, packet.payload_size()); 278 EXPECT_EQ(0u, packet.payload_size());
249 EXPECT_EQ(0u, packet.padding_size()); 279 EXPECT_EQ(0u, packet.padding_size());
250 } 280 }
251 281
252 } // namespace webrtc 282 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_packet.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698