diff options
author | Pali Rohár <pali.rohar@gmail.com> | 2020-12-13 14:48:44 +0100 |
---|---|---|
committer | Pali Rohár <pali.rohar@gmail.com> | 2020-12-13 14:48:44 +0100 |
commit | d230e1ca57d1863bbb8e6ddfd3716b4832bf66c3 (patch) | |
tree | ef1d3e1ac3a500f01e64b5cf8b76855123d164e0 /src | |
parent | b1b55b2ae4a3c54c5dc8a8156decf39659c11381 (diff) | |
download | dlfcn-win32-d230e1ca57d1863bbb8e6ddfd3716b4832bf66c3.tar.gz dlfcn-win32-d230e1ca57d1863bbb8e6ddfd3716b4832bf66c3.tar.bz2 dlfcn-win32-d230e1ca57d1863bbb8e6ddfd3716b4832bf66c3.zip |
Rewrite function save_err_ptr_str() to not use sprintf()
sprintf() is marked by MSVC as unsafe and suppressing compile warning does
not work. It is still generated on AppVeyor. So rewrite code for converting
pointer number to string via open coded for-loop and do not use unsafe
sprintf() function anymore. New code correctly handles both 32bit and 64bit
variants and does not use any #ifdef _MSC_VER anymore.
Diffstat (limited to 'src')
-rw-r--r-- | src/dlfcn.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/dlfcn.c b/src/dlfcn.c index 532af91..3251661 100644 --- a/src/dlfcn.c +++ b/src/dlfcn.c | |||
@@ -186,13 +186,20 @@ static void save_err_str( const char *str ) | |||
186 | 186 | ||
187 | static void save_err_ptr_str( const void *ptr ) | 187 | static void save_err_ptr_str( const void *ptr ) |
188 | { | 188 | { |
189 | char ptr_buf[19]; /* 0x<pointer> up to 64 bits. */ | 189 | char ptr_buf[2 + 2 * sizeof( ptr ) + 1]; |
190 | char num; | ||
191 | size_t i; | ||
190 | 192 | ||
191 | #ifdef _MSC_VER | 193 | ptr_buf[0] = '0'; |
192 | /* Supress warning C4996: 'sprintf': This function or variable may be unsafe */ | 194 | ptr_buf[1] = 'x'; |
193 | #pragma warning( suppress: 4996 ) | 195 | |
194 | #endif | 196 | for( i = 0; i < 2 * sizeof( ptr ); i++ ) |
195 | sprintf( ptr_buf, "0x%p", ptr ); | 197 | { |
198 | num = ( ( (ULONG_PTR) ptr ) >> ( 8 * sizeof( ptr ) - 4 * ( i + 1 ) ) ) & 0xF; | ||
199 | ptr_buf[2+i] = num + ( ( num < 0xA ) ? '0' : ( 'A' - 0xA ) ); | ||
200 | } | ||
201 | |||
202 | ptr_buf[2 + 2 * sizeof( ptr )] = 0; | ||
196 | 203 | ||
197 | save_err_str( ptr_buf ); | 204 | save_err_str( ptr_buf ); |
198 | } | 205 | } |