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));