fix the C++ dangling pointer from the security check (#296)

* fix the C++ dangling pointer from the security check

* one more fixing
This commit is contained in:
Wenbing Li 2022-09-28 16:23:43 -07:00 коммит произвёл GitHub
Родитель 929283d4df
Коммит d29f6d0f42
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
45 изменённых файлов: 50 добавлений и 110 удалений

Просмотреть файл

@ -51,7 +51,7 @@ struct OrtTensorDimensions : std::vector<int64_t> {
}
int64_t Size() const {
int64_t s = 1.;
int64_t s = 1;
for (auto it = begin(); it != end(); ++it)
s *= *it;
return s;

Просмотреть файл

@ -896,13 +896,36 @@ struct CustomOpBase : OrtCustomOp {
OrtCustomOp::GetOutputTypeCount = [](const OrtCustomOp* this_) { return static_cast<const TOp*>(this_)->GetOutputTypeCount(); };
OrtCustomOp::GetOutputType = [](const OrtCustomOp* this_, size_t index) { return static_cast<const TOp*>(this_)->GetOutputType(index); };
OrtCustomOp::KernelCompute = [](void* op_kernel, OrtKernelContext* context) { static_cast<TKernel*>(op_kernel)->Compute(context); };
OrtCustomOp::KernelDestroy = [](void* op_kernel) { delete static_cast<TKernel*>(op_kernel); };
OrtCustomOp::KernelCompute = [](void* op_kernel, OrtKernelContext* context) { static_cast<TKernel*>(op_kernel)->Compute(context); };
#if defined(_MSC_VER) && !defined(__clang__)
#pragma warning(push)
#pragma warning(disable : 26409)
#endif
OrtCustomOp::KernelDestroy = [](void* op_kernel) { delete static_cast<TKernel*>(op_kernel); };
#if defined(_MSC_VER) && !defined(__clang__)
#pragma warning(pop)
#endif
OrtCustomOp::GetInputCharacteristic = [](const OrtCustomOp* this_, size_t index) { return static_cast<const TOp*>(this_)->GetInputCharacteristic(index); };
OrtCustomOp::GetOutputCharacteristic = [](const OrtCustomOp* this_, size_t index) { return static_cast<const TOp*>(this_)->GetOutputCharacteristic(index); };
}
template <typename... Args>
TKernel* CreateKernelImpl(Args&&... args) const {
#if defined(_MSC_VER) && !defined(__clang__)
#pragma warning(push)
#pragma warning(disable : 26409)
#endif
return new TKernel(std::forward<Args>(args)...);
#if defined(_MSC_VER) && !defined(__clang__)
#pragma warning(pop)
#endif
}
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return CreateKernelImpl(api);
}
// Default implementation of GetExecutionProviderType that returns nullptr to default to the CPU provider
const char* GetExecutionProviderType() const { return nullptr; }

Просмотреть файл

@ -77,8 +77,4 @@ struct CustomOpGaussianBlur : Ort::CustomOpBase<CustomOpGaussianBlur, KernelGaus
const char* GetName() const{
return "GaussianBlur";
}
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelGaussianBlur(api);
}
};

Просмотреть файл

@ -48,8 +48,4 @@ struct CustomOpImageReader : Ort::CustomOpBase<CustomOpImageReader, KernelImageR
const char* GetName() const{
return "ImageReader";
}
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelImageReader(api);
}
};

Просмотреть файл

@ -34,10 +34,6 @@ struct KernelInverse : BaseKernel {
};
struct CustomOpInverse : Ort::CustomOpBase<CustomOpInverse, KernelInverse> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelInverse(api);
}
const char* GetName() const {
return "Inverse";
}

Просмотреть файл

@ -40,10 +40,6 @@ struct KernelNegPos : BaseKernel {
};
struct CustomOpNegPos : Ort::CustomOpBase<CustomOpNegPos, KernelNegPos> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelNegPos(api);
}
const char* GetName() const{
return "NegPos";
}

Просмотреть файл

@ -51,10 +51,6 @@ ONNXTensorElementDataType CustomOpSegmentExtraction::GetOutputType(size_t /*inde
return ONNX_TENSOR_ELEMENT_DATA_TYPE_INT64;
};
void* CustomOpSegmentExtraction::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelSegmentExtraction(api);
};
const char* CustomOpSegmentExtraction::GetName() const {
return "SegmentExtraction";
};

Просмотреть файл

@ -16,6 +16,5 @@ struct CustomOpSegmentExtraction : Ort::CustomOpBase<CustomOpSegmentExtraction,
size_t GetOutputTypeCount() const;
ONNXTensorElementDataType GetOutputType(size_t index) const;
const char* GetName() const;
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
ONNXTensorElementDataType GetInputType(size_t index) const;
};

Просмотреть файл

@ -71,10 +71,6 @@ ONNXTensorElementDataType CustomOpSegmentSum::GetOutputType(size_t /*index*/) co
return ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT;
};
void* CustomOpSegmentSum::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelSegmentSum(api);
};
const char* CustomOpSegmentSum::GetName() const {
return "SegmentSum";
};

Просмотреть файл

@ -16,6 +16,5 @@ struct CustomOpSegmentSum : Ort::CustomOpBase<CustomOpSegmentSum, KernelSegmentS
size_t GetOutputTypeCount() const;
ONNXTensorElementDataType GetOutputType(size_t index) const;
const char* GetName() const;
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
ONNXTensorElementDataType GetInputType(size_t index) const;
};

Просмотреть файл

@ -52,7 +52,7 @@ void KernelMaskedFill::Compute(OrtKernelContext* context) {
}
void* CustomOpMaskedFill::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelMaskedFill(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpMaskedFill::GetName() const { return "MaskedFill"; };

Просмотреть файл

@ -24,10 +24,6 @@ ONNXTensorElementDataType CustomOpStringEqual::GetOutputType(size_t /*index*/) c
return ONNX_TENSOR_ELEMENT_DATA_TYPE_BOOL;
};
void* CustomOpStringEqual::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const{
return new KernelStringEqual(api);
};
const char* CustomOpStringEqual::GetName() const {
return "StringEqual";
};

Просмотреть файл

@ -16,6 +16,5 @@ struct CustomOpStringEqual : Ort::CustomOpBase<CustomOpStringEqual, KernelString
size_t GetOutputTypeCount() const;
ONNXTensorElementDataType GetOutputType(size_t index) const;
const char* GetName() const;
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const;
ONNXTensorElementDataType GetInputType(size_t index) const;
};

Просмотреть файл

@ -4,9 +4,6 @@
#include "string_tensor.h"
#include "op_ragged_tensor.hpp"
KernelRaggedTensorToSparse::KernelRaggedTensorToSparse(const OrtApi& api) : BaseKernel(api) {
}
void KernelRaggedTensorToSparse::Compute(OrtKernelContext* context) {
const OrtValue* n_elements = ort_.KernelContext_GetInput(context, 0);
const int64_t* p_n_elements = ort_.GetTensorData<int64_t>(n_elements);
@ -53,10 +50,6 @@ ONNXTensorElementDataType CustomOpRaggedTensorToSparse::GetOutputType(size_t /*i
return ONNX_TENSOR_ELEMENT_DATA_TYPE_INT64;
};
void* CustomOpRaggedTensorToSparse::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelRaggedTensorToSparse(api);
};
const char* CustomOpRaggedTensorToSparse::GetName() const {
return "RaggedTensorToSparse";
};
@ -135,7 +128,7 @@ ONNXTensorElementDataType CustomOpRaggedTensorToDense::GetOutputType(size_t /*in
};
void* CustomOpRaggedTensorToDense::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelRaggedTensorToDense(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpRaggedTensorToDense::GetName() const {
@ -194,7 +187,7 @@ ONNXTensorElementDataType CustomOpStringRaggedTensorToDense::GetOutputType(size_
};
void* CustomOpStringRaggedTensorToDense::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelStringRaggedTensorToDense(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpStringRaggedTensorToDense::GetName() const {

Просмотреть файл

@ -6,7 +6,9 @@
#include "ocos.h"
struct KernelRaggedTensorToSparse : BaseKernel {
KernelRaggedTensorToSparse(const OrtApi& api);
KernelRaggedTensorToSparse(const OrtApi& api)
: BaseKernel(api) {}
void Compute(OrtKernelContext* context);
};
@ -15,7 +17,6 @@ struct CustomOpRaggedTensorToSparse : Ort::CustomOpBase<CustomOpRaggedTensorToSp
size_t GetOutputTypeCount() const;
ONNXTensorElementDataType GetOutputType(size_t index) const;
const char* GetName() const;
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const;
ONNXTensorElementDataType GetInputType(size_t index) const;
};

Просмотреть файл

@ -63,7 +63,7 @@ void KernelStringRegexReplace::Compute(OrtKernelContext* context) {
}
void* CustomOpStringRegexReplace::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelStringRegexReplace(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpStringRegexReplace::GetName() const { return "StringRegexReplace"; };

Просмотреть файл

@ -80,7 +80,7 @@ void KernelStringRegexSplitWithOffsets::Compute(OrtKernelContext* context) {
}
void* CustomOpStringRegexSplitWithOffsets::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelStringRegexSplitWithOffsets(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpStringRegexSplitWithOffsets::GetName() const { return "StringRegexSplitWithOffsets"; };

Просмотреть файл

@ -37,10 +37,6 @@ void KernelStringConcat::Compute(OrtKernelContext* context) {
FillTensorDataString(api_, ort_, context, left_value, output);
}
void* CustomOpStringConcat::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelStringConcat(api);
};
const char* CustomOpStringConcat::GetName() const { return "StringConcat"; };
size_t CustomOpStringConcat::GetInputTypeCount() const {

Просмотреть файл

@ -12,7 +12,6 @@ struct KernelStringConcat : BaseKernel {
};
struct CustomOpStringConcat : Ort::CustomOpBase<CustomOpStringConcat, KernelStringConcat> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
const char* GetName() const;
size_t GetInputTypeCount() const;
ONNXTensorElementDataType GetInputType(size_t index) const;

Просмотреть файл

@ -71,7 +71,7 @@ void KernelStringECMARegexReplace::Compute(OrtKernelContext* context) {
}
void* CustomOpStringECMARegexReplace::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelStringECMARegexReplace(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpStringECMARegexReplace::GetName() const { return "StringECMARegexReplace"; };

Просмотреть файл

@ -85,7 +85,7 @@ void KernelStringECMARegexSplitWithOffsets::Compute(OrtKernelContext* context) {
}
void* CustomOpStringECMARegexSplitWithOffsets::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelStringECMARegexSplitWithOffsets(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpStringECMARegexSplitWithOffsets::GetName() const { return "StringECMARegexSplitWithOffsets"; };

Просмотреть файл

@ -43,10 +43,6 @@ void KernelStringHash::Compute(OrtKernelContext* context) {
}
}
void* CustomOpStringHash::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelStringHash(api);
};
const char* CustomOpStringHash::GetName() const { return "StringToHashBucket"; };
size_t CustomOpStringHash::GetInputTypeCount() const {
@ -106,10 +102,6 @@ void KernelStringHashFast::Compute(OrtKernelContext* context) {
}
}
void* CustomOpStringHashFast::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelStringHashFast(api);
};
const char* CustomOpStringHashFast::GetName() const { return "StringToHashBucketFast"; };
size_t CustomOpStringHashFast::GetInputTypeCount() const {

Просмотреть файл

@ -12,7 +12,6 @@ struct KernelStringHash : BaseKernel {
};
struct CustomOpStringHash : Ort::CustomOpBase<CustomOpStringHash, KernelStringHash> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
const char* GetName() const;
size_t GetInputTypeCount() const;
ONNXTensorElementDataType GetInputType(size_t index) const;
@ -26,7 +25,6 @@ struct KernelStringHashFast : BaseKernel {
};
struct CustomOpStringHashFast : Ort::CustomOpBase<CustomOpStringHashFast, KernelStringHashFast> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
const char* GetName() const;
size_t GetInputTypeCount() const;
ONNXTensorElementDataType GetInputType(size_t index) const;

Просмотреть файл

@ -86,10 +86,6 @@ void KernelStringJoin::Compute(OrtKernelContext* context) {
FillTensorDataString(api_, ort_, context, out, output);
}
void* CustomOpStringJoin::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelStringJoin(api);
};
const char* CustomOpStringJoin::GetName() const {
return "StringJoin";
};

Просмотреть файл

@ -12,7 +12,6 @@ struct KernelStringJoin : BaseKernel {
};
struct CustomOpStringJoin : Ort::CustomOpBase<CustomOpStringJoin, KernelStringJoin> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
const char* GetName() const;
size_t GetInputTypeCount() const;
ONNXTensorElementDataType GetInputType(size_t index) const;

Просмотреть файл

@ -27,10 +27,6 @@ void KernelStringLength::Compute(OrtKernelContext* context) {
}
}
void* CustomOpStringLength::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelStringLength(api);
};
const char* CustomOpStringLength::GetName() const { return "StringLength"; };
size_t CustomOpStringLength::GetInputTypeCount() const {

Просмотреть файл

@ -12,7 +12,6 @@ struct KernelStringLength : BaseKernel {
};
struct CustomOpStringLength : Ort::CustomOpBase<CustomOpStringLength, KernelStringLength> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
const char* GetName() const;
size_t GetInputTypeCount() const;
ONNXTensorElementDataType GetInputType(size_t index) const;

Просмотреть файл

@ -25,10 +25,6 @@ void KernelStringLower::Compute(OrtKernelContext* context) {
FillTensorDataString(api_, ort_, context, X, output);
}
void* CustomOpStringLower::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelStringLower(api);
};
const char* CustomOpStringLower::GetName() const { return "StringLower"; };
size_t CustomOpStringLower::GetInputTypeCount() const {

Просмотреть файл

@ -12,7 +12,6 @@ struct KernelStringLower : BaseKernel {
};
struct CustomOpStringLower : Ort::CustomOpBase<CustomOpStringLower, KernelStringLower> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
const char* GetName() const;
size_t GetInputTypeCount() const;
ONNXTensorElementDataType GetInputType(size_t index) const;

Просмотреть файл

@ -42,7 +42,7 @@ void KernelStringMapping::Compute(OrtKernelContext* context) {
}
void* CustomOpStringMapping::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelStringMapping(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpStringMapping::GetName() const { return "StringMapping"; };

Просмотреть файл

@ -96,10 +96,6 @@ void KernelStringSplit::Compute(OrtKernelContext* context) {
FillTensorDataString(api_, ort_, context, words, out_text);
}
void* CustomOpStringSplit::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelStringSplit(api);
};
const char* CustomOpStringSplit::GetName() const {
return "StringSplit";
};

Просмотреть файл

@ -12,7 +12,6 @@ struct KernelStringSplit : BaseKernel {
};
struct CustomOpStringSplit : Ort::CustomOpBase<CustomOpStringSplit, KernelStringSplit> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
const char* GetName() const;
size_t GetInputTypeCount() const;
ONNXTensorElementDataType GetInputType(size_t index) const;

Просмотреть файл

@ -133,7 +133,7 @@ void KernelStringToVector::Compute(OrtKernelContext* context) {
}
void* CustomOpStringToVector::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelStringToVector(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpStringToVector::GetName() const { return "StringToVector"; };

Просмотреть файл

@ -26,10 +26,6 @@ void KernelStringUpper::Compute(OrtKernelContext* context) {
FillTensorDataString(api_, ort_, context, X, output);
}
void* CustomOpStringUpper::CreateKernel(const OrtApi& api, const OrtKernelInfo* /* info */) const {
return new KernelStringUpper(api);
};
const char* CustomOpStringUpper::GetName() const { return "StringUpper"; };
size_t CustomOpStringUpper::GetInputTypeCount() const {

Просмотреть файл

@ -12,7 +12,6 @@ struct KernelStringUpper : BaseKernel {
};
struct CustomOpStringUpper : Ort::CustomOpBase<CustomOpStringUpper, KernelStringUpper> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const;
const char* GetName() const;
size_t GetInputTypeCount() const;
ONNXTensorElementDataType GetInputType(size_t index) const;

Просмотреть файл

@ -125,7 +125,7 @@ void KernelVectorToString::Compute(OrtKernelContext* context) {
}
void* CustomOpVectorToString::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelVectorToString(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpVectorToString::GetName() const { return "VectorToString"; };

Просмотреть файл

@ -106,7 +106,7 @@ void KernelBasicTokenizer::Compute(OrtKernelContext* context) {
}
void* CustomOpBasicTokenizer::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelBasicTokenizer(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpBasicTokenizer::GetName() const { return "BasicTokenizer"; };

Просмотреть файл

@ -318,7 +318,7 @@ void KernelBertTokenizer::Compute(OrtKernelContext* context) {
}
void* CustomOpBertTokenizer::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelBertTokenizer(api, info);
return CreateKernelImpl(api, info);
}
const char* CustomOpBertTokenizer::GetName() const { return "BertTokenizer"; }
@ -374,7 +374,7 @@ void KernelHfBertTokenizer::Compute(OrtKernelContext* context) {
}
void* CustomOpHfBertTokenizer::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelHfBertTokenizer(api, info);
return CreateKernelImpl(api, info);
}
const char* CustomOpHfBertTokenizer::GetName() const { return "HfBertTokenizer"; }

Просмотреть файл

@ -171,7 +171,7 @@ void KernelBertTokenizerDecoder::Compute(OrtKernelContext* context) {
}
void* CustomOpBertTokenizerDecoder::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelBertTokenizerDecoder(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpBertTokenizerDecoder::GetName() const { return "BertTokenizerDecoder"; };

Просмотреть файл

@ -79,7 +79,7 @@ void KernelBlingFireSentenceBreaker::Compute(OrtKernelContext* context) {
}
void* CustomOpBlingFireSentenceBreaker::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelBlingFireSentenceBreaker(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpBlingFireSentenceBreaker::GetName() const { return "BlingFireSentenceBreaker"; };

Просмотреть файл

@ -583,7 +583,7 @@ void KernelBpeTokenizer::Compute(OrtKernelContext* context) {
}
void* CustomOpBpeTokenizer::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelBpeTokenizer(api, info);
return CreateKernelImpl(api, info);
}
const char* CustomOpBpeTokenizer::GetName() const {

Просмотреть файл

@ -101,7 +101,7 @@ void KernelSentencepieceTokenizer::Compute(OrtKernelContext* context) {
}
void* CustomOpSentencepieceTokenizer::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelSentencepieceTokenizer(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpSentencepieceTokenizer::GetName() const {

Просмотреть файл

@ -163,7 +163,7 @@ void KernelWordpieceTokenizer::Compute(OrtKernelContext* context) {
}
void* CustomOpWordpieceTokenizer::CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelWordpieceTokenizer(api, info);
return CreateKernelImpl(api, info);
};
const char* CustomOpWordpieceTokenizer::GetName() const {

Просмотреть файл

@ -61,7 +61,7 @@ struct PyCustomOpFactory : Ort::CustomOpBase<PyCustomOpFactory, PyCustomOpKernel
}
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new PyCustomOpKernel(api, info, opdef_->obj_id, opdef_->attrs);
return CreateKernelImpl(api, info, opdef_->obj_id, opdef_->attrs);
};
const char* GetName() const {

Просмотреть файл

@ -52,9 +52,6 @@ struct KernelOne : BaseKernel {
};
struct CustomOpOne : Ort::CustomOpBase<CustomOpOne, KernelOne> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelOne(api);
};
const char* GetName() const {
return "CustomOpOne";
};
@ -98,9 +95,6 @@ struct KernelTwo : BaseKernel {
};
struct CustomOpTwo : Ort::CustomOpBase<CustomOpTwo, KernelTwo> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelTwo(api);
};
const char* GetName() const {
return "CustomOpTwo";
};
@ -146,8 +140,8 @@ struct KernelThree : BaseKernel {
struct CustomOpThree : Ort::CustomOpBase<CustomOpThree, KernelThree> {
void* CreateKernel(const OrtApi& api, const OrtKernelInfo* info) const {
return new KernelThree(api, info);
};
return CreateKernelImpl(api, info);
};
const char* GetName() const {
return "CustomOpThree";
};