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) ); }