From 1c9573e8d21919deee56845fdb97bb9da72b7e4d Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 14 Sep 2020 14:37:20 +0200 Subject: [PATCH] dxf: [skip ci] Coverity: Buffer not null terminated --- src/Mod/Draft/App/dxf.cpp | 13 ++++++++++++- src/Mod/Import/App/dxf.cpp | 13 ++++++++++++- src/Mod/Path/libarea/dxf.cpp | 13 ++++++++++++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/Mod/Draft/App/dxf.cpp b/src/Mod/Draft/App/dxf.cpp index 7909dc43cf..2bb8eb5f93 100644 --- a/src/Mod/Draft/App/dxf.cpp +++ b/src/Mod/Draft/App/dxf.cpp @@ -1575,9 +1575,20 @@ void CDxfRead::get_line() strcpy(m_str, str); } +void dxf_strncpy(char* dst, const char* src, size_t size) +{ + size_t ret = strlen(src); + + if (size) { + size_t len = (ret >= size) ? size - 1 : ret; + memcpy(dst, src, len); + dst[len] = '\0'; + } +} + void CDxfRead::put_line(const char *value) { - strncpy( m_unused_line, value, sizeof(m_unused_line) ); + dxf_strncpy( m_unused_line, value, sizeof(m_unused_line) ); } diff --git a/src/Mod/Import/App/dxf.cpp b/src/Mod/Import/App/dxf.cpp index f9f45af080..c6a0608811 100644 --- a/src/Mod/Import/App/dxf.cpp +++ b/src/Mod/Import/App/dxf.cpp @@ -3153,9 +3153,20 @@ void CDxfRead::get_line() strcpy(m_str, str); } +void dxf_strncpy(char* dst, const char* src, size_t size) +{ + size_t ret = strlen(src); + + if (size) { + size_t len = (ret >= size) ? size - 1 : ret; + memcpy(dst, src, len); + dst[len] = '\0'; + } +} + void CDxfRead::put_line(const char *value) { - strncpy( m_unused_line, value, sizeof(m_unused_line) ); + dxf_strncpy( m_unused_line, value, sizeof(m_unused_line) ); } diff --git a/src/Mod/Path/libarea/dxf.cpp b/src/Mod/Path/libarea/dxf.cpp index 8c3cba29f9..d15acd4f19 100644 --- a/src/Mod/Path/libarea/dxf.cpp +++ b/src/Mod/Path/libarea/dxf.cpp @@ -1378,9 +1378,20 @@ void CDxfRead::get_line() strcpy(m_str, str); } +void dxf_strncpy(char* dst, const char* src, size_t size) +{ + size_t ret = strlen(src); + + if (size) { + size_t len = (ret >= size) ? size - 1 : ret; + memcpy(dst, src, len); + dst[len] = '\0'; + } +} + void CDxfRead::put_line(const char *value) { - strncpy( m_unused_line, value, sizeof(m_unused_line) ); + dxf_strncpy( m_unused_line, value, sizeof(m_unused_line) ); }