Mercurial > hg > orthanc-databases
changeset 803:accca9ae6111
sanitize memory handling in OPERATION_LOOKUP_RESOURCES
| author | Sebastien Jodogne <s.jodogne@gmail.com> |
|---|---|
| date | Sat, 11 Apr 2026 10:55:42 +0200 |
| parents | f31f174d194b |
| children | 1f93acd88206 |
| files | Framework/Plugins/DatabaseBackendAdapterV4.cpp |
| diffstat | 1 files changed, 18 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/Framework/Plugins/DatabaseBackendAdapterV4.cpp Fri Apr 10 19:21:43 2026 +0200 +++ b/Framework/Plugins/DatabaseBackendAdapterV4.cpp Sat Apr 11 10:55:42 2026 +0200 @@ -583,9 +583,26 @@ countValues += constraint.values().size(); } + std::vector<size_t> valuesIndex; + valuesIndex.resize(request.lookup().size()); + std::vector<const char*> values; values.reserve(countValues); + for (int i = 0; i < request.lookup().size(); i++) + { + valuesIndex[i] = values.size(); + + const Orthanc::DatabasePluginMessages::DatabaseConstraint& constraint = request.lookup(i); + + for (int j = 0; j < constraint.values().size(); j++) + { + values.push_back(constraint.values(j).c_str()); + } + } + + assert(values.size() == countValues); + DatabaseConstraints lookup; for (int i = 0; i < request.lookup().size(); i++) @@ -640,13 +657,7 @@ } else { - c.values = &values[values.size()]; - - for (int j = 0; j < constraint.values().size(); j++) - { - assert(values.size() < countValues); - values.push_back(constraint.values(j).c_str()); - } + c.values = &values[valuesIndex[i]]; } lookup.AddConstraint(new DatabaseConstraint(c));
