A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/protocolbuffers/protobuf/commit/ffade4a9f5a7b0728457855049e61d621ed529ec below:

Create hardened versions of `Get` and `Mutable` for repeated_field. · protocolbuffers/protobuf@ffade4a · GitHub

File tree Expand file treeCollapse file tree 2 files changed

+51

-0

lines changed

Filter options

Expand file treeCollapse file tree 2 files changed

+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