[SERVER-27978] Segfault updating deeply nested document Created: 12/Feb/17  Updated: 13/Feb/17  Resolved: 13/Feb/17

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

Type: Bug Priority: Major - P3
Reporter: Bruce Lucas (Inactive) Assignee: Kyle Suarez
Resolution: Duplicate Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Duplicate
duplicates SERVER-26703 Inserting deeply-nested documents sho... Closed
Related
Backwards Compatibility: Fully Compatible
Participants:

 Description   

An update that modifies a document so as to increase its nesting depth to about 3000 produces a segfault due to a deeply nested recursion with the following stack trace:

...
#6109 0x000000000099f857 in void mongo::mutablebson::Document::Impl::writeChildren<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*) const ()
#6110 0x000000000099f3d6 in void mongo::mutablebson::Document::Impl::writeElement<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*, mongo::StringData const*) const ()
#6111 0x000000000099f857 in void mongo::mutablebson::Document::Impl::writeChildren<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*) const ()
#6112 0x000000000099f3d6 in void mongo::mutablebson::Document::Impl::writeElement<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*, mongo::StringData const*) const ()
#6113 0x000000000099f857 in void mongo::mutablebson::Document::Impl::writeChildren<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*) const ()
#6114 0x000000000099f3d6 in void mongo::mutablebson::Document::Impl::writeElement<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*, mongo::StringData const*) const ()
#6115 0x000000000099f857 in void mongo::mutablebson::Document::Impl::writeChildren<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*) const ()
#6116 0x000000000099f3d6 in void mongo::mutablebson::Document::Impl::writeElement<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*, mongo::StringData const*) const ()
#6117 0x000000000099f857 in void mongo::mutablebson::Document::Impl::writeChildren<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*) const ()
#6118 0x000000000099f3d6 in void mongo::mutablebson::Document::Impl::writeElement<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*, mongo::StringData const*) const ()
#6119 0x000000000099f857 in void mongo::mutablebson::Document::Impl::writeChildren<mongo::BSONObjBuilder>(unsigned int, mongo::BSONObjBuilder*) const ()
#6120 0x0000000000a4c708 in mongo::mutablebson::Document::getObject() const ()
#6121 0x0000000000befdd4 in mongo::UpdateStage::transformAndUpdate(mongo::Snapshotted<mongo::BSONObj> const&, mongo::RecordId&) ()
#6122 0x0000000000bf0938 in mongo::UpdateStage::work(unsigned long*) ()
#6123 0x0000000000e05f25 in mongo::PlanExecutor::getNextImpl(mongo::Snapshotted<mongo::BSONObj>*, mongo::RecordId*) ()
#6124 0x0000000000e065e9 in mongo::PlanExecutor::getNext(mongo::BSONObj*, mongo::RecordId*) ()
#6125 0x0000000000e066e5 in mongo::PlanExecutor::executePlan() ()

or the following stack trace, depending on the circumstances:

...
#5124 0x0000000000bed839 in mongo::(anonymous namespace)::storageValidChildren(mongo::mutablebson::ConstElement const&, bool) ()
#5125 0x0000000000becb67 in mongo::(anonymous namespace)::storageValid(mongo::mutablebson::ConstElement const&, bool) ()
#5126 0x0000000000bed839 in mongo::(anonymous namespace)::storageValidChildren(mongo::mutablebson::ConstElement const&, bool) ()
#5127 0x0000000000becb67 in mongo::(anonymous namespace)::storageValid(mongo::mutablebson::ConstElement const&, bool) ()
#5128 0x0000000000bed839 in mongo::(anonymous namespace)::storageValidChildren(mongo::mutablebson::ConstElement const&, bool) ()
#5129 0x0000000000becb67 in mongo::(anonymous namespace)::storageValid(mongo::mutablebson::ConstElement const&, bool) ()
#5130 0x0000000000bed839 in mongo::(anonymous namespace)::storageValidChildren(mongo::mutablebson::ConstElement const&, bool) ()
#5131 0x0000000000becb67 in mongo::(anonymous namespace)::storageValid(mongo::mutablebson::ConstElement const&, bool) ()
#5132 0x0000000000bed839 in mongo::(anonymous namespace)::storageValidChildren(mongo::mutablebson::ConstElement const&, bool) ()
#5133 0x0000000000becb67 in mongo::(anonymous namespace)::storageValid(mongo::mutablebson::ConstElement const&, bool) ()
#5134 0x0000000000bee108 in mongo::(anonymous namespace)::validate(mongo::BSONObj const&, mongo::FieldRefSet const&, mongo::mutablebson::Document const&, std::vector<mongo::FieldRef*, std::allocator<mongo::FieldRef*> > const*, mongo::ModifierInterface::Options const&) ()
#5135 0x0000000000bef8db in mongo::UpdateStage::transformAndUpdate(mongo::Snapshotted<mongo::BSONObj> const&, mongo::RecordId&) ()
#5136 0x0000000000bf0938 in mongo::UpdateStage::work(unsigned long*) ()
#5137 0x0000000000e05f25 in mongo::PlanExecutor::getNextImpl(mongo::Snapshotted<mongo::BSONObj>*, mongo::RecordId*) ()
#5138 0x0000000000e065e9 in mongo::PlanExecutor::getNext(mongo::BSONObj*, mongo::RecordId*) ()
#5139 0x0000000000e066e5 in mongo::PlanExecutor::executePlan() ()
#5140 0x0000000000b66939 in mongo::WriteBatchExecutor::execUpdate(mongo::BatchItemRef const&, mongo::BSONObj*, mongo::WriteErrorDetail**) ()


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