[SERVER-23039] Coverity analysis defect 98152: Using invalid iterator Created: 10/Mar/16  Updated: 14/Apr/16  Resolved: 04/Apr/16

Status: Closed
Project: Core Server
Component/s: Sharding
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Coverity Collector User Assignee: Misha Tyulenev
Resolution: Won't Fix Votes: 0
Labels: coverity
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Backwards Compatibility: Fully Compatible
Operating System: ALL
Sprint: Sharding 12 (04/01/16), Sharding 13 (04/22/16)
Participants:

 Description   

An invalid or past-the-end iterator is being used

Defect 98152 (STATIC_C)
Checker INVALIDATE_ITERATOR (subcategory none)
File: /src/mongo/db/s/sharding_state.cpp
Function mongo::ShardingState::_refreshMetadata(mongo::OperationContext *, const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&, const mongo::ChunkVersion &, bool, mongo::ChunkVersion *)
/src/mongo/db/s/sharding_state.cpp, line: 754
Function "end" creates an iterator.

            if (it != _collMetadata.end())

/src/mongo/db/s/sharding_state.cpp, line: 754
"it" testing equal to "this->_collMetadata.end()".

            if (it != _collMetadata.end())

/src/mongo/db/s/sharding_state.cpp, line: 801
Dereferencing iterator "it" though it is already past the end of its container.

                    it->second = remoteMetadata;

File: /src/mongo/db/s/sharding_state.cpp
Function mongo::ShardingState::_refreshMetadata(mongo::OperationContext *, const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&, const mongo::ChunkVersion &, bool, mongo::ChunkVersion *)
/src/mongo/db/s/sharding_state.cpp, line: 754
Function "end" creates an iterator.

            if (it != _collMetadata.end())

/src/mongo/db/s/sharding_state.cpp, line: 754
"it" testing equal to "this->_collMetadata.end()".

            if (it != _collMetadata.end())

/src/mongo/db/s/sharding_state.cpp, line: 808
Dereferencing iterator "it" though it is already past the end of its container.

                    it->second = remoteMetadata;



 Comments   
Comment by Misha Tyulenev [ 04/Apr/16 ]

The issue is gone in the master branch but still exists in the 3.2 branch. The code looks ok,
The check for dassert at https://github.com/mongodb/mongo/blob/v3.2/src/mongo/db/s/sharding_state.cpp#L807 is redundant -
the "it" is valid because the test on the line https://github.com/mongodb/mongo/blob/v3.2/src/mongo/db/s/sharding_state.cpp#L789 is
equivalent to iterator being valid because afterCollVersion is set on the line https://github.com/mongodb/mongo/blob/v3.2/src/mongo/db/s/sharding_state.cpp#L759 only when afterMetadata is set.

Generated at Thu Feb 08 04:02:10 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.