[Mingw-w64-public] [PATCH] Add vsprintf_s wrapper

2013-05-09 Thread Erik van Pienbroek
Hi,

Recently one of our users reported an issue where an attempt was done to
run a Qt5 based application on Windows XP [1]. Upon startup the user got
a fatal error that the symbol vsprintf_s couldn't be found in
msvcrt.dll. It turned out that this symbol is only available in the
msvcrt.dll in later versions of Windows.

As the mingw-w64-crt already contains various wrappers for other secure
API functions I decided to implement a wrapper for vsprintf_s as well.

We've been using this patch for some time now in Fedora without issues
and we would like to propose it for inclusion in the upstream mingw-w64
repo.

The patch doesn't contain an updated Makefile.in as I'm using a
different version of autotools which causes too much other parts to
change as well, so automake need to be run before committing this patch
(I don't have commit rights to the mingw-w64 repo).

Regards,

Erik van Pienbroek
Fedora MinGW SIG

[1]: https://bugzilla.redhat.com/show_bug.cgi?id=917323
--- mingw-w64-crt/Makefile.am.orig	2013-03-04 19:48:33.103373245 +0100
+++ mingw-w64-crt/Makefile.am	2013-03-04 19:49:42.175932725 +0100
@@ -244,6 +244,7 @@
   secapi/_vcprintf_s.c secapi/_vcprintf_s_l.c \
   secapi/_cwprintf_s.c secapi/_cwprintf_s_l.c \
   secapi/_vcwprintf_s.c secapi/_vcwprintf_s_l.c \
+  secapi/vsprintf_s.c \
   secapi/_access_s.c secapi/_waccess_s.c \
   secapi/_chsize_s.c secapi/_mktemp_s.c secapi/_wmktemp_s.c \
   secapi/_umask_s.c \
--- /dev/null	2013-03-03 23:07:12.487394095 +0100
+++ mingw-w64-crt/secapi/vsprintf_s.c	2013-03-04 19:48:26.188317233 +0100
@@ -0,0 +1,40 @@
+#include windows.h
+#include malloc.h
+#include errno.h
+
+HMODULE __mingw_get_msvcrt_handle(void);
+int __cdecl vsprintf (char *, const char *, va_list);
+int __cdecl vsprintf_s (char *, size_t, const char *, va_list);
+static int __cdecl _int_vsprintf_s (char *, size_t, const char *, va_list);
+static int __cdecl _stub (char *, size_t, const char *, va_list);
+
+int __cdecl (*__MINGW_IMP_SYMBOL(vsprintf_s))(char *, size_t, const char *, va_list) = 
+ _stub;
+
+static int __cdecl
+_stub (char *_DstBuf, size_t _Size, const char *_Format, va_list _ArgList)
+{
+  int __cdecl (*f)(char *, size_t, const char *, va_list) = __MINGW_IMP_SYMBOL(vsprintf_s);
+
+  if (f == _stub)
+{
+	f = (int __cdecl (*)(char *, size_t, const char *, va_list))
+	GetProcAddress (__mingw_get_msvcrt_handle (), vprintf_s);
+	if (!f)
+	  f = _int_vsprintf_s;
+	__MINGW_IMP_SYMBOL(vsprintf_s) = f;
+}
+  return (*f)(_DstBuf, _Size, _Format, _ArgList);
+}
+
+int __cdecl
+vsprintf_s (char *_DstBuf, size_t _Size, const char *_Format, va_list _ArgList)
+{
+  return _stub (_DstBuf, _Size, _Format, _ArgList);
+}
+
+static int __cdecl
+_int_vsprintf_s (char *_DstBuf, size_t _Size, const char *_Format, va_list _ArgList)
+{
+  return vsprintf (_DstBuf, _Format, _ArgList);
+}
--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCH] Add vsprintf_s wrapper

2013-05-09 Thread Kai Tietz
2013/5/9 Erik van Pienbroek e...@vanpienbroek.nl:
 Hi,

 Recently one of our users reported an issue where an attempt was done to
 run a Qt5 based application on Windows XP [1]. Upon startup the user got
 a fatal error that the symbol vsprintf_s couldn't be found in
 msvcrt.dll. It turned out that this symbol is only available in the
 msvcrt.dll in later versions of Windows.

 As the mingw-w64-crt already contains various wrappers for other secure
 API functions I decided to implement a wrapper for vsprintf_s as well.

 We've been using this patch for some time now in Fedora without issues
 and we would like to propose it for inclusion in the upstream mingw-w64
 repo.

 The patch doesn't contain an updated Makefile.in as I'm using a
 different version of autotools which causes too much other parts to
 change as well, so automake need to be run before committing this patch
 (I don't have commit rights to the mingw-w64 repo).

 Regards,

 Erik van Pienbroek
 Fedora MinGW SIG

 [1]: https://bugzilla.redhat.com/show_bug.cgi?id=917323

Thanks, patch is ok.  Sadly I don't have right now the proper
autotools available too, so JonY would you mind to commit it and
regenerate the autotool-files?

Thanks in advance,
Kai

--
Learn Graph Databases - Download FREE O'Reilly Book
Graph Databases is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public