+51
-0
lines changedFilter options
+51
-0
lines changed Original file line number Diff line number Diff line change
@@ -1437,6 +1437,28 @@ internal::RepeatedFieldBackInsertIterator<T> RepeatedFieldBackInserter(
1437
1437
return internal::RepeatedFieldBackInsertIterator<T>(mutable_field);
1438
1438
}
1439
1439
1440
+
namespace internal {
1441
+
template <typename T>
1442
+
inline void CheckIndexInBoundsOrAbort(const RepeatedField<T>& field,
1443
+
int index) {
1444
+
if (ABSL_PREDICT_FALSE(index < 0 || index >= field.size())) {
1445
+
LogIndexOutOfBoundsAndAbort(index, field.size());
1446
+
}
1447
+
}
1448
+
1449
+
template <typename T>
1450
+
const T& CheckedGetOrAbort(const RepeatedField<T>& field, int index) {
1451
+
CheckIndexInBoundsOrAbort(field, index);
1452
+
return field.Get(index);
1453
+
}
1454
+
1455
+
template <typename T>
1456
+
inline T* CheckedMutableOrAbort(RepeatedField<T>* field, int index) {
1457
+
CheckIndexInBoundsOrAbort(*field, index);
1458
+
return field->Mutable(index);
1459
+
}
1460
+
} // namespace internal
1461
+
1440
1462
1441
1463
} // namespace protobuf
1442
1464
} // namespace google
Original file line number Diff line number Diff line change
@@ -1343,6 +1343,35 @@ TEST_F(RepeatedFieldInsertionIteratorsTest, Halves) {
1343
1343
protobuffer.repeated_double().end(), halves.begin()));
1344
1344
}
1345
1345
1346
+
TEST(RepeatedField, CheckedGetOrAbortTest) {
1347
+
RepeatedField<int> field;
1348
+
1349
+
// Empty container tests.
1350
+
EXPECT_DEATH(CheckedGetOrAbort(field, -1), "index: -1, size: 0");
1351
+
EXPECT_DEATH(CheckedGetOrAbort(field, field.size()), "index: 0, size: 0");
1352
+
1353
+
// Non-empty container tests
1354
+
field.Add(5);
1355
+
field.Add(4);
1356
+
EXPECT_DEATH(CheckedGetOrAbort(field, 2), "index: 2, size: 2");
1357
+
EXPECT_DEATH(CheckedGetOrAbort(field, -1), "index: -1, size: 2");
1358
+
}
1359
+
1360
+
TEST(RepeatedField, CheckedMutableOrAbortTest) {
1361
+
RepeatedField<int> field;
1362
+
1363
+
// Empty container tests.
1364
+
EXPECT_DEATH(CheckedMutableOrAbort(&field, -1), "index: -1, size: 0");
1365
+
EXPECT_DEATH(CheckedMutableOrAbort(&field, field.size()),
1366
+
"index: 0, size: 0");
1367
+
1368
+
// Non-empty container tests
1369
+
field.Add(5);
1370
+
field.Add(4);
1371
+
EXPECT_DEATH(CheckedMutableOrAbort(&field, 2), "index: 2, size: 2");
1372
+
EXPECT_DEATH(CheckedMutableOrAbort(&field, -1), "index: -1, size: 2");
1373
+
}
1374
+
1346
1375
} // namespace
1347
1376
1348
1377
} // namespace protobuf
You can’t perform that action at this time.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4