advapi32/tests: Use memcmp() instead of strcmp() so that we can check 'intrazeroed' strings.
This commit is contained in:
parent
730083f219
commit
042a78dd05
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "wine/test.h"
|
#include "wine/test.h"
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
|
@ -37,6 +38,127 @@ static HMODULE hadvapi32;
|
||||||
static DWORD (WINAPI *pRegGetValueA)(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD);
|
static DWORD (WINAPI *pRegGetValueA)(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD);
|
||||||
static DWORD (WINAPI *pRegDeleteTreeA)(HKEY,LPCSTR);
|
static DWORD (WINAPI *pRegDeleteTreeA)(HKEY,LPCSTR);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Debugging functions from wine/libs/wine/debug.c */
|
||||||
|
|
||||||
|
/* allocate some tmp string space */
|
||||||
|
/* FIXME: this is not 100% thread-safe */
|
||||||
|
static char *get_temp_buffer( int size )
|
||||||
|
{
|
||||||
|
static char *list[32];
|
||||||
|
static long pos;
|
||||||
|
char *ret;
|
||||||
|
int idx;
|
||||||
|
|
||||||
|
idx = ++pos % (sizeof(list)/sizeof(list[0]));
|
||||||
|
if ((ret = realloc( list[idx], size ))) list[idx] = ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* default implementation of wine_dbgstr_an */
|
||||||
|
static const char *wine_debugstr_an( const char *str, int n )
|
||||||
|
{
|
||||||
|
static const char hex[16] = "0123456789abcdef";
|
||||||
|
char *dst, *res;
|
||||||
|
size_t size;
|
||||||
|
|
||||||
|
if (!((ULONG_PTR)str >> 16))
|
||||||
|
{
|
||||||
|
if (!str) return "(null)";
|
||||||
|
res = get_temp_buffer( 6 );
|
||||||
|
sprintf( res, "#%04x", LOWORD(str) );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
if (n == -1) n = strlen(str);
|
||||||
|
if (n < 0) n = 0;
|
||||||
|
size = 10 + min( 300, n * 4 );
|
||||||
|
dst = res = get_temp_buffer( size );
|
||||||
|
*dst++ = '"';
|
||||||
|
while (n-- > 0 && dst <= res + size - 9)
|
||||||
|
{
|
||||||
|
unsigned char c = *str++;
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
|
||||||
|
case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
|
||||||
|
case '\t': *dst++ = '\\'; *dst++ = 't'; break;
|
||||||
|
case '"': *dst++ = '\\'; *dst++ = '"'; break;
|
||||||
|
case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
|
||||||
|
default:
|
||||||
|
if (c >= ' ' && c <= 126)
|
||||||
|
*dst++ = c;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*dst++ = '\\';
|
||||||
|
*dst++ = 'x';
|
||||||
|
*dst++ = hex[(c >> 4) & 0x0f];
|
||||||
|
*dst++ = hex[c & 0x0f];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*dst++ = '"';
|
||||||
|
if (n > 0)
|
||||||
|
{
|
||||||
|
*dst++ = '.';
|
||||||
|
*dst++ = '.';
|
||||||
|
*dst++ = '.';
|
||||||
|
}
|
||||||
|
*dst++ = 0;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* default implementation of wine_dbgstr_wn */
|
||||||
|
static const char *wine_debugstr_wn( const WCHAR *str, int n )
|
||||||
|
{
|
||||||
|
char *dst, *res;
|
||||||
|
|
||||||
|
if (!HIWORD(str))
|
||||||
|
{
|
||||||
|
if (!str) return "(null)";
|
||||||
|
res = get_temp_buffer( 6 );
|
||||||
|
sprintf( res, "#%04x", LOWORD(str) );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
if (n == -1) n = lstrlenW(str);
|
||||||
|
if (n < 0) n = 0;
|
||||||
|
else if (n > 200) n = 200;
|
||||||
|
dst = res = get_temp_buffer( n * 5 + 7 );
|
||||||
|
*dst++ = 'L';
|
||||||
|
*dst++ = '"';
|
||||||
|
while (n-- > 0)
|
||||||
|
{
|
||||||
|
WCHAR c = *str++;
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
|
||||||
|
case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
|
||||||
|
case '\t': *dst++ = '\\'; *dst++ = 't'; break;
|
||||||
|
case '"': *dst++ = '\\'; *dst++ = '"'; break;
|
||||||
|
case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
|
||||||
|
default:
|
||||||
|
if (c >= ' ' && c <= 126)
|
||||||
|
*dst++ = (char)c;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*dst++ = '\\';
|
||||||
|
sprintf(dst,"%04x",c);
|
||||||
|
dst+=4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*dst++ = '"';
|
||||||
|
if (*str)
|
||||||
|
{
|
||||||
|
*dst++ = '.';
|
||||||
|
*dst++ = '.';
|
||||||
|
*dst++ = '.';
|
||||||
|
}
|
||||||
|
*dst = 0;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define ADVAPI32_GET_PROC(func) \
|
#define ADVAPI32_GET_PROC(func) \
|
||||||
p ## func = (void*)GetProcAddress(hadvapi32, #func); \
|
p ## func = (void*)GetProcAddress(hadvapi32, #func); \
|
||||||
if(!p ## func) \
|
if(!p ## func) \
|
||||||
|
@ -119,8 +241,9 @@ static void test_hkey_main_Value_A(LPCSTR name, LPCSTR string,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ok(strcmp(value, string) == 0, "RegQueryValueExA failed: '%s' != '%s'\n",
|
ok(memcmp(value, string, cbData) == 0, "RegQueryValueExA failed: %s/%d != %s/%d\n",
|
||||||
value, string);
|
wine_debugstr_an(value, cbData), cbData,
|
||||||
|
wine_debugstr_an(string, full_byte_len), full_byte_len);
|
||||||
}
|
}
|
||||||
HeapFree(GetProcessHeap(), 0, value);
|
HeapFree(GetProcessHeap(), 0, value);
|
||||||
}
|
}
|
||||||
|
@ -158,7 +281,9 @@ static void test_hkey_main_Value_W(LPCWSTR name, LPCWSTR string,
|
||||||
/* When cbData == 0, RegQueryValueExW() should not modify the buffer */
|
/* When cbData == 0, RegQueryValueExW() should not modify the buffer */
|
||||||
string=nW;
|
string=nW;
|
||||||
}
|
}
|
||||||
ok(lstrcmpW(value, string) == 0, "the string RegQueryValueExW is wrong\n");
|
ok(memcmp(value, string, cbData) == 0, "RegQueryValueExW failed: %s/%d != %s/%d\n",
|
||||||
|
wine_debugstr_wn(value, cbData), cbData,
|
||||||
|
wine_debugstr_wn(string, full_byte_len), full_byte_len);
|
||||||
HeapFree(GetProcessHeap(), 0, value);
|
HeapFree(GetProcessHeap(), 0, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,7 +295,7 @@ static void test_set_value(void)
|
||||||
static const WCHAR name2W[] = {'S','o','m','e','I','n','t','r','a','Z','e','r','o','e','d','S','t','r','i','n','g', 0};
|
static const WCHAR name2W[] = {'S','o','m','e','I','n','t','r','a','Z','e','r','o','e','d','S','t','r','i','n','g', 0};
|
||||||
static const WCHAR emptyW[] = {0};
|
static const WCHAR emptyW[] = {0};
|
||||||
static const WCHAR string1W[] = {'T','h','i','s','N','e','v','e','r','B','r','e','a','k','s', 0};
|
static const WCHAR string1W[] = {'T','h','i','s','N','e','v','e','r','B','r','e','a','k','s', 0};
|
||||||
static const WCHAR string2W[] = {'T','h','i','s', 0 ,'B','r','e','a','k','s', 0 , 0 ,'A', 0 , 0 , 0 , 0 ,'L','o','t', 0 , 0 , 0 , 0};
|
static const WCHAR string2W[] = {'T','h','i','s', 0 ,'B','r','e','a','k','s', 0 , 0 ,'A', 0 , 0 , 0 , 'L','o','t', 0 , 0 , 0 , 0, 0};
|
||||||
|
|
||||||
static const char name1A[] = "CleanSingleString";
|
static const char name1A[] = "CleanSingleString";
|
||||||
static const char name2A[] = "SomeIntraZeroedString";
|
static const char name2A[] = "SomeIntraZeroedString";
|
||||||
|
|
Loading…
Reference in New Issue