@@ -348,12 +348,12 @@ static void DumpOpenVINOEPModel([[maybe_unused]] const std::filesystem::path& on
348348
349349// this is a helper function to set the data fields, it duplicates ExternalDataInfo::SetExternalLocationToProto
350350// but we cannot use that function as it is not part of public provider api.
351- static void SetExternalDataFields (ONNX_NAMESPACE::TensorProto* proto_init, const void * data_ptr, int64_t data_size) {
351+ static void SetExternalDataFields (ONNX_NAMESPACE::TensorProto& proto_init, const void * data_ptr, int64_t data_size) {
352352 static constexpr const char * ORT_INTERNAL_MEM_INITIALIZER = " */_ORT_MEM_ADDR_/*" ;
353- auto * external_data = proto_init-> mutable_external_data ();
353+ auto * external_data = proto_init. mutable_external_data ();
354354 bool found_location = false , found_offset = false , found_length = false ;
355355 const int ext_data_size = external_data->size ();
356- proto_init-> set_data_location (ONNX_NAMESPACE::TensorProto_DataLocation::TensorProto_DataLocation_EXTERNAL);
356+ proto_init. set_data_location (ONNX_NAMESPACE::TensorProto_DataLocation::TensorProto_DataLocation_EXTERNAL);
357357
358358 for (int j = 0 ; j < ext_data_size; ++j) {
359359 auto & ext_entry = external_data->at (j);
@@ -543,6 +543,10 @@ BackendManager::GetModelProtoFromFusedNode(const onnxruntime::Node& fused_node,
543543
544544 auto * proto_init = it->second ;
545545
546+ if (!proto_init) {
547+ ORT_THROW (name + " proto initializer is null!" );
548+ }
549+
546550 // If the proto initializer is missing data, fill it in
547551 if (!proto_init->has_raw_data () && src_init->has_raw_data ()) {
548552 *proto_init->mutable_raw_data () = src_init->raw_data ();
@@ -554,10 +558,12 @@ BackendManager::GetModelProtoFromFusedNode(const onnxruntime::Node& fused_node,
554558 << src_init->name ()
555559 << " , data_type: " << src_init->data_type ()
556560 << " , raw_data size: " << src_init->raw_data ().size ();
557- if (src_init->raw_data ().size () > 0 )
558- SetExternalDataFields (proto_init, src_init->raw_data ().data (), src_init->raw_data ().size ());
559- else
560- LOGS (logger, VERBOSE) << " Initializer has empty raw_data: skipping initializer '" << src_init->name () << " '..." ;
561+ if (src_init->raw_data ().size () > 0 ) {
562+ SetExternalDataFields (*proto_init, src_init->raw_data ().data (), src_init->raw_data ().size ());
563+ }
564+ else {
565+ LOGS (logger, VERBOSE) << " Initializer has empty raw_data: skipping initializer '" << src_init->name () << " '..." ;
566+ }
561567 } else if (onnxruntime::utils::HasExternalDataInMemory (*src_init)) {
562568 auto it_ext = external_initializers_offset_and_length.find (name);
563569 if (it_ext == external_initializers_offset_and_length.end ()) {
@@ -570,7 +576,7 @@ BackendManager::GetModelProtoFromFusedNode(const onnxruntime::Node& fused_node,
570576
571577 LOGS (logger, VERBOSE) << " In-memory initializer EXT: " << src_init->name () << " , size: " << length;
572578
573- SetExternalDataFields (proto_init, (const void *)offset, length);
579+ SetExternalDataFields (* proto_init, (const void *)offset, length);
574580 } else {
575581 LOGS (logger, VERBOSE) << " File-based initializer: " << src_init->name () << " , data_type: " << src_init->data_type ();
576582 }
0 commit comments