You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

security_coding_violation_cases.md 1.3 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. # 典型违反安全编码案例
  2. ## 案例1:未对安全函数返回值进行校验
  3. > 修改前:
  4. 进行内存拷贝过程中,未对拷贝函数返回值进行校验,导致拷贝失败时无法捕获失败信息。
  5. ```c
  6. (void) memcpy_s(output_addr, output->size, input_addr, input->size);
  7. ```
  8. > 修改后
  9. ```c
  10. if (memcpy_s(output_addr, output->size, input_addr, input->size) != EOK) {
  11. ...
  12. }
  13. ```
  14. ## 案例2:未对指针是否为空进行校验
  15. > 修改前:
  16. `primitive`由外部传入,使用指针`primitive`前,未对指针是否为空进行校验,若指针为空,则调用`name()`成员函数时会产生空指针引用导致程序挂死。
  17. ```c++
  18. AbstractBasePtr InferImplPad(const AnalysisEnginePtr &, const PrimitivePtr &primitive,
  19. const AbstractBasePtrList &args_spec_list) {
  20. const std::string op_name = primitive->name(); // 未对meta_graph_指针进行校验
  21. ...
  22. }
  23. ```
  24. > 修改后:
  25. ```C++
  26. AbstractBasePtr InferImplPad(const AnalysisEnginePtr &, const PrimitivePtr &primitive,
  27. const AbstractBasePtrList &args_spec_list) {
  28. MS_EXCEPTION_IF_NULL(primitive);
  29. const std::string op_name = primitive->name(); // 校验指针是否为空后再使用该指针
  30. ...
  31. }
  32. ```