Null-terminating check for backend conf api (#7516)
author이춘석/On-Device Lab(SR)/Staff Engineer/삼성전자 <chunseok.lee@samsung.com>
Tue, 17 Sep 2019 09:53:09 +0000 (18:53 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Tue, 17 Sep 2019 09:53:09 +0000 (18:53 +0900)
* Null-terminating check for backend conf api

- Add null terminaing function
- Add check routine

Signed-off-by: Chunseok Lee <chunseok.lee@samsung.com>
* Give name to arg max length in backend conf

- Add macro for max length
- 32 for backend name, 64 for op name

* fix format

* add null check

* add null check to nnfw_set_op_backend

* Check null inside nnfw_session

runtimes/neurun/frontend/api/wrapper/nnfw_api.cc
runtimes/neurun/frontend/api/wrapper/nnfw_api.hpp

index 80a768e..a6021f0 100644 (file)
 #include <stdint.h>
 #include <util/ConfigSource.h>
 
+/*
+ * API does not accept string argument longer than max length below
+ */
+#define MAX_BACKEND_NAME_LENGTH 32
+#define MAX_OP_NAME_LENGTH 64
+
+// Is null-terminating in length ?
+static bool null_terminating(const char *str, uint32_t length)
+{
+  for (uint32_t i = 0; i < length; i++)
+  {
+    if (*(str + i) == '\0')
+    {
+      return true;
+    }
+  }
+  return false;
+}
+
 nnfw_session::nnfw_session()
     : _graph{nullptr}, _execution{nullptr},
       _kernel_registry{std::make_shared<neurun::backend::custom::KernelRegistry>()},
@@ -300,10 +319,15 @@ static std::string get_op_backend_string(std::string op)
   }
 }
 
-NNFW_STATUS nnfw_session::set_default_backend(std::string backend)
+NNFW_STATUS nnfw_session::set_default_backend(const char *backend)
 {
   try
   {
+    if (!backend || null_terminating(backend, MAX_BACKEND_NAME_LENGTH) == false)
+    {
+      return NNFW_STATUS_ERROR;
+    }
+
     _source->set("OP_BACKEND_ALLOPS", backend);
   }
   catch (...)
@@ -314,11 +338,16 @@ NNFW_STATUS nnfw_session::set_default_backend(std::string backend)
   return NNFW_STATUS_NO_ERROR;
 }
 
-NNFW_STATUS nnfw_session::set_op_backend(std::string op, std::string backend)
+NNFW_STATUS nnfw_session::set_op_backend(const char *op, const char *backend)
 {
-
   try
   {
+    if (!op || !null_terminating(op, MAX_OP_NAME_LENGTH) || !backend ||
+        !null_terminating(backend, MAX_BACKEND_NAME_LENGTH))
+    {
+      return NNFW_STATUS_ERROR;
+    }
+
     auto key = get_op_backend_string(op);
 
     if (key.empty())
index 5b44650..8451416 100644 (file)
@@ -64,8 +64,8 @@ public:
 
   NNFW_STATUS register_custom_operation(const std::string &id, nnfw_custom_eval eval_func);
 
-  NNFW_STATUS set_default_backend(std::string backend);
-  NNFW_STATUS set_op_backend(std::string op, std::string backend);
+  NNFW_STATUS set_default_backend(const char *backend);
+  NNFW_STATUS set_op_backend(const char *op, const char *backend);
 
 private:
   std::shared_ptr<neurun::graph::Graph> _graph;