From 3fb0bab16fcab0d52aa3b22a74b12c725bda05b3 Mon Sep 17 00:00:00 2001 From: Dmitri Smirnov Date: Mon, 22 Jun 2026 15:30:05 -0700 Subject: [PATCH] Fix incorrect string tensor creation in CreateGetVectorOfMapsStringFloat test The test was passing std::string* as raw memory to CreateTensor, which is invalid for string tensors. Use CreateTensor with allocator + FillStringTensor instead (matching the pattern in CreateGetSeqStringTensors). Also remove redundant keys vector and use std::array for fixed-size dims and values. Fixes #13246 --- onnxruntime/test/shared_lib/test_nontensor_types.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/onnxruntime/test/shared_lib/test_nontensor_types.cc b/onnxruntime/test/shared_lib/test_nontensor_types.cc index 497298474b36a..dc361e6a65510 100644 --- a/onnxruntime/test/shared_lib/test_nontensor_types.cc +++ b/onnxruntime/test/shared_lib/test_nontensor_types.cc @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +#include #include #include #include @@ -102,13 +103,13 @@ TEST(CApiTest, CreateGetVectorOfMapsStringFloat) { // support zipmap output typ constexpr int64_t NUM_KV_PAIRS = 4; std::vector in; const char* keys_arr[NUM_KV_PAIRS] = {"abc", "def", "ghi", "jkl"}; - std::vector keys{keys_arr, keys_arr + NUM_KV_PAIRS}; - std::vector dims = {NUM_KV_PAIRS}; - std::vector values{3.0f, 1.0f, 2.f, 0.f}; + std::array dims = {NUM_KV_PAIRS}; + std::array values{3.0f, 1.0f, 2.f, 0.f}; for (size_t i = 0; i < N; ++i) { // create key tensor - Ort::Value keys_tensor = Ort::Value::CreateTensor(info, keys.data(), keys.size() * sizeof(std::string), - dims.data(), dims.size(), ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING); + Ort::Value keys_tensor = Ort::Value::CreateTensor(Ort::AllocatorWithDefaultOptions(), dims.data(), dims.size(), + ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING); + keys_tensor.FillStringTensor(keys_arr, NUM_KV_PAIRS); // create value tensor Ort::Value values_tensor = Ort::Value::CreateTensor(info, values.data(), values.size() * sizeof(float), dims.data(), dims.size(), ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT); @@ -147,7 +148,7 @@ TEST(CApiTest, CreateGetVectorOfMapsStringFloat) { // support zipmap output typ std::string stemp(s + start, count); keys_ret.insert(stemp); } - ASSERT_EQ(keys_ret, std::set(std::begin(keys), std::end(keys))); + ASSERT_EQ(keys_ret, std::set(std::begin(keys_arr), std::end(keys_arr))); // second fetch the values Ort::Value values_ort = map_out.GetValue(1, default_allocator.get());