[Spice-devel] [vdagent-win 3/3] Remove MSVC++ strncpy/strcat fallbacks

Christophe Fergeau cfergeau at redhat.com
Mon Feb 16 02:29:00 PST 2015


We currently have macros silently replacing use of strncpy/strcat with
strcpy_s/strcat_s when using MSVC++. However, these macros can have
unexpected effects as they use sizeof to find out the maximum size of
the destination string. This is a very significant behaviour from
strncpy/strcat, which can lead to subtle bugs as the behaviour is
different between mingw and MSVC++.
Now that we have our implementation of strcpy_s/strcat_s, we don't need
these #defines.
---
 common/vdcommon.h   | 2 --
 vdagent/file_xfer.h | 2 +-
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/common/vdcommon.h b/common/vdcommon.h
index 002ac23..93bb673 100644
--- a/common/vdcommon.h
+++ b/common/vdcommon.h
@@ -92,8 +92,6 @@ errno_t vdagent_strcpy_s(char *strDestination,
 
 #ifdef _MSC_VER // compiling with Visual Studio
 #define snprintf         sprintf_s
-#define strncpy(d,s,n)   strcpy_s(s, __min(n+1, sizeof(d)), s)
-#define strcat(d,s)      strcat_s(d, sizeof(d), s)
 #define sscanf           sscanf_s
 #endif
 
diff --git a/vdagent/file_xfer.h b/vdagent/file_xfer.h
index 7f756e3..7ac911e 100644
--- a/vdagent/file_xfer.h
+++ b/vdagent/file_xfer.h
@@ -27,7 +27,7 @@ typedef struct ALIGN_VC FileXferTask {
         // FIXME: should raise an error if name is too long..
         //        currently the only user is FileXfer::handle_start
         //        which verifies that strlen(_name) < MAX_PATH
-        vdagent_strncpy_s(name, sizeof(name), _name);
+        vdagent_strcpy_s(name, sizeof(name), _name);
     }
     HANDLE handle;
     uint64_t size;
-- 
2.1.0



More information about the Spice-devel mailing list