# These three happen if valgrind doesn't notice and handle speculative
# implementations of strchr/strlen/strcat properly.
{
   visual_c_ignore_strchr
   Memcheck:Cond
   fun:strchr
}
{
   visual_c_ignore_strlen
   Memcheck:Cond
   fun:strlen
}
{
   visual_c_ignore_strcat
   Memcheck:Cond
   fun:strcat
}
# These two are because ioctl often involves structs with holes.
# We need to either add one of these per ioctl, or
# just make it apply for *any* call to NtFsControlFile.
{
   wine_struct_hole_FILE_PIPE_WAIT_FOR_BUFFER
   Memcheck:Param
   writev(vector[1])
   obj:*
   fun:wine_server_call
   fun:server_ioctl_file
   fun:NtFsControlFile
   fun:WaitNamedPipeW
}
{
   wine_struct_hole_FILE_PIPE_WAIT_FOR_BUFFER_NONOPTIMIZED
   Memcheck:Param
   writev(vector[1])
   obj:*
   fun:send_request
   fun:wine_server_call
   fun:server_ioctl_file
   fun:NtFsControlFile
   fun:WaitNamedPipeW
}
{
   # See http://www.winehq.org/pipermail/wine-devel/2008-November/070539.html
   # We might want to add an annotationto WriteConsoleInputW
   # for the hole someday.
   wine_struct_hole_WriteConsoleInput
   Memcheck:Param
   writev(vector[...])
   fun:writev
   fun:send_request
   fun:wine_server_call
   fun:wine_server_call_err
   fun:WriteConsoleInputW
}
# We sure got a lot of these in the logs when I first started.
# I suppressed them to avoid dispair.
{
   todo_wine_arrgh_wcstombs
   Memcheck:Value4
   fun:wine_cp_wcstombs
}
# Now on to system bugs that aren't Wine's fault.
{
   suppress_nss_leak
   Memcheck:Leak
   fun:malloc
   obj:*
   fun:__nss_database_lookup
}
{
   bogus_addr4_ldso_27
   Memcheck:Addr4
   obj:/lib*/ld-2.7.so
}
{
   bogus_addr4_ldso_261
   Memcheck:Addr4
   obj:/lib*/ld-2.6.1.so
}
{
   bogus_addr4_ldso_25
   Memcheck:Addr4
   obj:/lib*/ld-2.5.so
}
{
   bogus_addr4_ldso_236
   Memcheck:Addr4
   obj:/lib*/ld-2.3.6.so
}
{
   bogus_cond_ldso_27
   Memcheck:Cond
   obj:/lib*/ld-2.7.so
}
{
   bogus_cond_ldso_261
   Memcheck:Cond
   obj:/lib*/ld-2.6.1.so
}
{
   bogus_cond_ldso_25
   Memcheck:Cond
   obj:/lib*/ld-2.5.so
}
{
   bogus_cond_ldso_236
   Memcheck:Cond
   obj:/lib*/ld-2.3.6.so
}
{
   bogus_cond_libglcore_16912
   Memcheck:Cond
   obj:/usr/lib*/libGLcore.so.169.12
}
{
   bogus_value4_libglcore_16912
   Memcheck:Value4
   obj:/usr/lib*/libGLcore.so.169.12
}
{
   bogus_addr2_libglcore_16912
   Memcheck:Addr2
   obj:/usr/lib*/libGLcore.so.169.12
}
{
   suppress_ioctl_libglcore_18044
   Memcheck:Param
   ioctl(generic)
   fun:ioctl
   obj:/usr/lib32/libGLcore.so.180.44
}
{
   suppress_cond_libglcore_18044
   Memcheck:Cond
   obj:/usr/lib32/libGLcore.so.180.44
}
{
   bogus_addr4_libgl_109631
   Memcheck:Addr4
   obj:/usr/lib*/libGL.so.1.0.9631
}
{
   bogus_addr4_libgl_109639
   Memcheck:Addr4
   obj:/usr/lib*/libGL.so.1.0.9639
}
{
   suppress_leak_libgl_109631
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libGL.so.1.0.9631
}
{
   suppress_leak_libgl_18044
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib32/libGL.so.180.44
}
{
   suppress_leak_wglGetProcAddress
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib/libGL*
   ...
   fun:glXChooseVisual
   fun:has_opengl
   fun:X11DRV_wglGetProcAddress
   fun:wglGetProcAddress
}
{
   bogus_X11_1
   Memcheck:Param
   write(buf)
   obj:*
   obj:/usr/lib*/libX11.so.6.2.0
}
{
   bogus_X11_2
   Memcheck:Param
   write(buf)
   obj:*
   obj:*
   obj:/usr/lib*/libX11.so.6.2.0
}
{
   bogus_Xcursor_Cond
   Memcheck:Cond
   obj:/usr/lib*/libXcursor.so.1.0.2
}
{
   bogus_Xcursor_Leak
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib/libXcursor.so.1.0.2
}
{
   suppress_i915_ioctl
   Memcheck:Param
   ioctl(generic)
   obj:*
   obj:/usr/lib*/dri/i915_dri.so
}
{
   suppress_i915_cond
   Memcheck:Cond
   obj:/usr/lib*/dri/i915_dri.so
}
{
   suppress_i915_value
   Memcheck:Value4
   obj:/usr/lib*/dri/i915_dri.so
}
{
   suppress_i915_leak1
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/dri/i915_dri.so
}
{
   suppress_i915_leak2
   Memcheck:Leak
   fun:memalign
   fun:*
   obj:/usr/lib*/dri/i915_dri.so
}
{
   suppress_libasound_overlap
   Memcheck:Overlap
   fun:memcpy
   obj:/usr/lib*/libasound.so.2.0.0
}
{
   suppress_libasound_connect
   Memcheck:Param
   socketcall.connect(serv_addr..sun_path)
   obj:*
   obj:/usr/lib*/libasound.so.2.0.0
}
{
   suppress_libasound_connect2
   Memcheck:Cond
   fun:snd_pcm_direct_client_connect
   obj:/usr/lib*/libasound.so.2.0.0
}
{
   suppress_libasound_bind
   Memcheck:Param
   socketcall.bind(my_addr..sun_path)
   obj:*
   obj:/usr/lib*/libasound.so.2.0.0
}
{
   suppress_libasound_ioctl
   Memcheck:Param
   ioctl(arg)
   obj:*
   obj:/usr/lib*/libasound.so.2.0.0
}
{
   suppress_libasound_ioctl2
   Memcheck:Param
   ioctl(arg)
   obj:*
   fun:ioctl
   obj:/usr/lib*/libasound.so.2.0.0
}
{
   suppress_libasound_semctl
   Memcheck:Param
   semctl(IPC_SET, arg.buf)
   obj:*
   obj:/usr/lib*/libasound.so.2.0.0
}
{
   todo_suppress_libasound_leak
   Memcheck:Leak
   ...
   obj:/usr/lib*/libasound.so.2.0.0
}
{
   todo_suppress_libfontconfig_leak
   Memcheck:Leak
   fun:malloc
   obj:/usr/lib*/libfontconfig.so.1.*
}
# thread_detach() should clean this up??
{
   todo_wine_dlls_winex11drv__x11drv_init_thread_data_main
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:x11drv_init_thread_data
}
# Supposedly there's a call back to X11DRV_DestroyIM at thread destruction time...?
# and thread_detach() should also clean it up??
{
   todo_wine_dlls_winex11drv__x11drv_init_thread_data_xim
   Memcheck:Leak
   fun:malloc
   fun:_XimOpenIM
   fun:_XimRegisterIMInstantiateCallback
   fun:XRegisterIMInstantiateCallback
   fun:X11DRV_SetupXIM
   fun:x11drv_init_thread_data
   fun:x11drv_thread_data
   fun:X11DRV_SetWindowPos
}
{
   todo_wine_dlls_winex11drv__X11DRV_XRandR_Init
   Memcheck:Leak
   fun:*alloc
   fun:XInitExtension
   fun:XextAddDisplay
   obj:*/libXrandr*
   fun:XRRQueryExtension
   fun:X11DRV_XRandR_Init
}
{
   todo_wine_dlls_winex11drv__X11DRV_XRender_Init
   Memcheck:Leak
   fun:*alloc
   fun:XInitExtension
   fun:XRenderFindDisplay
   fun:XRenderQueryExtension
   fun:X11DRV_XRender_Init
}
{
   todo_wine_dlls_winex11drv__xinerama_init
   Memcheck:Leak
   fun:*alloc
   fun:XInitExtension
   fun:XextAddDisplay
   ...
   fun:XPanoramiXQueryExtension
   fun:XineramaQueryExtension
   ...
   fun:xinerama_init
}
{
   todo_wine_dlls_winex11drv__XkbUseExtension
   Memcheck:Leak
   fun:*alloc
   fun:XInitExtension
   fun:XkbUseExtension
   fun:XOpenDisplay
}
{
   todo_wine_dlls_winex11drv__X11DRV_XComposite_Init
   Memcheck:Leak
   fun:*alloc
   fun:XInitExtension
   fun:XCompositeFindDisplay
   fun:XCompositeQueryExtension
}
{
   todo_wine_dlls_winex11drv__X11DRV_XF86VM_Init
   Memcheck:Leak
   fun:*alloc
   fun:XInitExtension
   fun:XextAddDisplay
   fun:*
   fun:XF86VidModeQueryExtension
   fun:X11DRV_XF86VM_Init
}
{
   todo_wine_dlls_winex11drv_XOpenDisplay
   Memcheck:Leak
   fun:malloc
   ...
   fun:xcb_connect
   fun:_XConnectXCB
   fun:XOpenDisplay
}
{
   todo_wine_dlls_winex11drv_XOpenDisplay_2
   Memcheck:Leak
   fun:malloc
   ...
   fun:xcb_get_extension_data
   fun:xcb_prefetch_maximum_request_length
   fun:xcb_get_maximum_request_length
   fun:XOpenDisplay
   fun:DllMain
}
{
   todo_suppress_alloc_module_leak
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:RtlCreateUnicodeString
   fun:alloc_module
}
{
   todo_suppress_dlopen_leak
   Memcheck:Leak
   fun:*alloc
   ...
   fun:dlopen
}
{
   todo_suppress_dlopen_leak2
   Memcheck:Leak
   fun:*alloc
   ...
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
}
{
   suppress_dlopen_addr4
   Memcheck:Addr4
   ...
   fun:__libc_dlopen_mode
}
{
   todo_suppress_load_library_leak
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:RtlAnsiStringToUnicodeString
   fun:RtlCreateUnicodeStringFromAsciiz
   fun:get_load_order
}
{
   todo_suppress_wine_init_load_order_leak
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:RtlAnsiStringToUnicodeString
   fun:RtlCreateUnicodeStringFromAsciiz
   fun:init_load_order
}
# ntdll/loader.c explicitly avoids freeing when .exe's exit at the moment
{
   todo_suppress_wine_alloc_module_leak
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:RtlCreateUnicodeString
   fun:alloc_module
}
{
   todo_suppress_explorer_leak
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:load_driver
   fun:loaderdrv_CreateDesktopWindow
   fun:WIN_CreateWindowEx
   fun:CreateWindowExW
   fun:manage_desktop
   fun:WinMain
   fun:main
}
{
   todo_suppress_exception_addr4
   Memcheck:Addr4
   fun:__wine_call_from_32_regs
   obj:/home/dank/wine-git/dlls/ntdll/ntdll.dll.so
   obj:/home/dank/wine-git/dlls/ntdll/ntdll.dll.so
   fun:raise_exception
}
{
   todo_ignore_bogus_writes_in_req_handler
   Memcheck:Param
   writev(vector[1])
   obj:*
   fun:call_req_handler
}
# See comment in dlls/kernel32/tests/thread.c at end of threadFunc1
{
   suppress_wine_verify_lstrlenA_deadbeef_zero
   Memcheck:Addr1
   fun:strlen
   fun:lstrlenA
   fun:threadFunc1
   obj:/home/dank/wine-git/dlls/ntdll/ntdll.dll.so
   fun:call_thread_func
}
# test_UnpackDDElParam intentionally passes a bad pointer
{
  suppress_wine_user32_dde_tests
  Memcheck:Addr2
  fun:GlobalLock
  fun:UnpackDDElParam
  fun:test_UnpackDDElParam
  fun:func_dde
  fun:run_test
  fun:main
}
{
   suppress_gmtime
   Memcheck:Cond
   obj:*
   obj:*
   fun:gmtime
   fun:FileTimeToDosDateTime
}
{
   suppress_gmtime_r
   Memcheck:Cond
   obj:*
   obj:*
   fun:gmtime_r
   fun:FileTimeToDosDateTime
}
{
   suppress_if_name2index_glibc_27
   Memcheck:Param
   ioctl(SIOCGIFINDEX)
   obj:/lib*/ld-2.7.so
   fun:getInterfaceIndexByName
}
{
   suppress_if_nameindex_glibc_23
   Memcheck:Param
   socketcall.sendto(msg)
   obj:/lib*/ld-2.3.*.so
   fun:if_nameindex
}
{
   # See also http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=553016
   # and http://bbs.archlinux.org/viewtopic.php?pid=273718
   suppress_glibc_dl_relocate_object
   Memcheck:Cond
   fun:_dl_relocate_object
}
{
   # With ubuntu 9.04:
   #  Uninitialised value was created by a stack allocation
   #    at  __libc_res_nsend (res_send.c:343)
   glibc_bug_libc_res_nsend
   Memcheck:Cond
   fun:__libc_res_nsend
}
# Naming convention for Wine suppressions:
# If we think it's solid:
# suppress_wine_dirname__functionname[_moreifneeded]
# If we aren't sure, change suppress to todo
{
   # intentionally frees an invalid pointer.
   # It would be nice if that were in a different
   # function, so we could suppress it specifically,
   # and not other possible warnings in the heap tests.
   suppress_wine_dlls_kernel32_tests__test_heap_invalid_free
   Memcheck:Free
   fun:notify_free
   fun:RtlFreeHeap
   fun:HeapFree
   fun:GlobalFree
   fun:test_heap
   fun:func_heap
   fun:run_test
   fun:main
}
{
   # Lots of little invalid things going on in this test
   suppress_wine_dlls_kernel32_tests_test_heap
   Memcheck:Addr2
   ...
   fun:test_heap
   fun:func_heap
   fun:run_test
   fun:main
}
{
   suppress_wine_dlls_kernel32_tests__CreateThread_basic_badaccess
   Memcheck:Addr1
   fun:strlen
   fun:lstrlenA
   fun:test_CreateThread_basic
}
{
   suppress_wine_dlls_kernel32_IsBadReadPtr
   Memcheck:Addr1
   fun:IsBadReadPtr
}
{
   suppress_wine_dlls_kernel32__IsBadWritePtr
   Memcheck:Addr1
   fun:IsBadWritePtr
}
{
   suppress_wine_dlls_kernel32_tests__doCrash
   Memcheck:Addr1
   fun:doCrash
}
# This one is for a jump to zero done intentionally by the crypt32 tests
# compiled with -O2, it looks like this?
{
   suppress_wine_dlls_crypt32_tests__test_data_msg_O2
   Memcheck:Addr4
   fun:__wine_call_from_32_regs
   fun:CryptMsgUpdate
   fun:test_data_msg
}
# compiled with -O0, it looks like this?
{
   suppress_wine_dlls_crypt32_tests__test_data_msg_O0
   Memcheck:Jump
   obj:*
   fun:CryptMsgUpdate
   fun:test_data_msg_update
   fun:test_data_msg
}
# These two functions test error returned by file read/write with null buffers
{
   suppress_wine_kernel32_tests__test_read_write_nullwrite
   Memcheck:Param
   write(buf)
   obj:/lib*/ld-*.so
   fun:WriteFile
   fun:test_read_write
   fun:func_file
   fun:run_test
   fun:main
}
{
   suppress_wine_kernel32_tests__test_read_write_nullread
   Memcheck:Param
   read(buf)
   obj:/lib*/ld-*.so
   fun:ReadFile
   fun:test_read_write
   fun:func_file
   fun:run_test
   fun:main
}

# test_SetThreadContext:
# The code in question looks like this:
#/* simulate a call to set_test_val(10) */
#stack = (int *)ctx.Esp;
#stack[-1] = 10;
#stack[-2] = ctx.Eip;
# So we actually are writing to the stack, just not using 'proper'
# access to the stack.
{
  suppress_wine_kernel32_tests__test_SetThreadContext
  Memcheck:Addr4
  fun:test_SetThreadContext
  fun:func_thread
  fun:run_test
  fun:main
}
{
   ignore_rsaenh_test_expected_bad_access
   Memcheck:Addr4
   fun:CryptReleaseContext
   fun:clean_up_base_environment
}

# Back to system suppressions that aren't wine's fault
# gecko is #1 in the list of offending upstream libraries...
{
   todo_gecko_warnings_r_us
   Memcheck:Addr4
   obj:*wine_gecko*
}
{
   todo_gecko_warnings_r_us2
   Memcheck:Cond
   obj:*wine_gecko*
}
# followed by openssl
{
   todo_openssl_warnings_r_us1a
   Memcheck:Addr4
   obj:/usr/lib*/libcrypto.so*
}
{
   todo_openssl_warnings_r_us1b
   Memcheck:Value4
   obj:/usr/lib*/*libcrypto.so*
}
{
   todo_openssl_warnings_r_us1c
   Memcheck:Cond
   obj:/usr/lib*/*libcrypto.so*
}
{
   todo_openssl_warnings_r_us2a
   Memcheck:Addr4
   obj:*
   obj:/usr/lib*/*libcrypto.so*
}
{
   todo_openssl_warnings_r_us2b
   Memcheck:Value4
   obj:*
   obj:/usr/lib*/*libcrypto.so*
}
{
   todo_openssl_warnings_r_us2c
   Memcheck:Cond
   obj:*
   obj:/usr/lib*/*libcrypto.so*
}
{
   todo_openssl_warnings_r_us1d
   Memcheck:Param
   write(buf)
   obj:*
   obj:/usr/lib*/*libcrypto.so*
}
{
   todo_openssl_warnings_r_us3a
   Memcheck:Addr4
   obj:/usr/lib*/*libssl.so*
}
{
   todo_openssl_warnings_r_us3b
   Memcheck:Value4
   obj:/usr/lib*/*libssl.so*
}
{
   todo_openssl_warnings_r_us3c
   Memcheck:Cond
   obj:/usr/lib*/*libssl.so*
}
{
   # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=532059
   # http://rt.openssl.org/index.html?q=1642
   todo_openssl_warnings_mod_inverse
   Memcheck:Cond
   fun:BN_mod_inverse
}
{
   # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=532059
   # http://rt.openssl.org/index.html?q=1642
   todo_openssl_warnings_div
   Memcheck:Cond
   fun:BN_div
}
# And sane
{
   todo_sane_warnings_r_us
   Memcheck:Addr4
   obj:*libsane*
}
{
   todo_sane_warnings_r_us2
   Memcheck:Cond
   obj:*libsane*
}
# and visual C++ 6
{
   todo_visual_c_chkstk
   Memcheck:Addr4
   fun:$$$00001
}
{
   todo_visual_c_chkstk_2
   Memcheck:Addr4
   fun:_chkstk
}
{
   visual_c_ignore_bad_typeid
   Memcheck:Cond
   fun:??0bad_typeid@@QAE@ABV0@@Z
}
# and pulseaudio?? possible bad stack from valgrind?
{
   fixme_pulseaudio_leak_widOpen
   Memcheck:Leak
   fun:calloc
   ...
   fun:pa_cvolume_set
}
{
   fixme_pulseaudio_leak_pa_mainloop_dispatch
   Memcheck:Leak
   fun:calloc
   fun:pa_xmalloc0
   obj:/usr/lib32/libpulse.so.0.7.1
   obj:/usr/lib32/libpulse.so.0.7.1
   obj:/usr/lib32/libpulse.so.0.7.1
   obj:/usr/lib32/libpulse.so.0.7.1
   obj:/usr/lib32/libpulse.so.0.7.1
   obj:/usr/lib32/libpulse.so.0.7.1
   obj:/usr/lib32/libpulse.so.0.7.1
   obj:/usr/lib32/libpulse.so.0.7.1
   fun:pa_mainloop_dispatch
}
# and msacm32? possible bad stack from valgrind?
{
   fixme_msacm32_leak
   Memcheck:Leak
   fun:calloc
   obj:*
   fun:acmDriverRemove
   obj:*
   fun:acmFilterTagDetailsW
}
{
   fixme_msacm32_leak2
   Memcheck:Leak
   fun:calloc
   fun:attr_copy_file
   ...
   fun:widReset
}
# Seen in chromium's EmfTest
{
   fixme_msacm32_leak3
   Memcheck:Leak
   fun:calloc
   obj:*
   fun:wodPrepare
   obj:*
   fun:wodMapperReconfigure
}
# aw, heck, sometimes the symbols aren't there?
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:calloc
   obj:*
   obj:*msacm32.drv.so
}

# shell32 isn't freeing its imagelist cache on unload?
{
   wine_bug_20544
   Memcheck:Leak
   fun:malloc
   fun:XInitExtension
   fun:XextAddDisplay
   fun:*
   fun:XShmQueryVersion
   fun:X11DRV_CreateDIBSection
   fun:CreateDIBSection
   fun:ImageList_CreateImage
   fun:ImageList_Create
   fun:SIC_Initialize
   fun:DllMain
}
# winmm isn't freeing everything on unload?
{
   wine_bug_20545
   Memcheck:Leak
   ...
   fun:Rtl*AllocateHeap
   fun:MMDRV_InitPerType
   fun:MMDRV_Install
   fun:MMDRV_Init
}
{
   # This one's probably benign?
   user32_builtin_classes_leak
   Memcheck:Leak
   fun:calloc
   fun:XAddExtension
   fun:_XcursorGetDisplayInfo
   fun:XcursorSupportsARGB
   fun:XcursorNoticeCreateBitmap
   fun:_XNoticeCreateBitmap
   fun:XCreatePixmap
   fun:X11DRV_BITMAP_Init
   fun:device_init
   fun:X11DRV_CreateDC
   fun:CreateDCW
   fun:CURSORICON_CreateIconFromBMI
   fun:CreateIconFromResourceEx
   fun:CURSORICON_Load
   fun:LoadImageW
   fun:LoadImageA
   fun:LoadCursorA
   fun:register_builtin
   fun:CLASS_RegisterBuiltinClasses
}
# yet another leak on unload, seen on chromium's net http and ftp tests
{
   wine_bug_20549
   Memcheck:Leak
   fun:malloc
   ...
   fun:SECUR32_initSchannelSP
}
{
   # yet another gnutls leak?
   gnutls_leak_bug_2
   Memcheck:Leak
   fun:calloc
   ...
#   fun:_gnutls_hash_init         (commented out because sometimes this shows up without symbols)
#   fun:gnutls_handshake
   fun:schan_InitializeSecurityContextW
   fun:InitializeSecurityContextW
}
# leak on thread creation?
{
   wine_bug_20552
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:alloc_thread_tls
   fun:MODULE_DllThreadAttach
}
{
   wine_secur32_ignore_fork_helper_leak
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:fork_helper
   fun:SECUR32_initNTLMSP
}
{
   wine_bug_20548_ConnectNamedPipe
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:server_ioctl_file
   fun:NtFsControlFile
}
{
   wine_bug_20548_ReadFile
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:NtReadFile
}
{
   wine_bug_20548_WriteFile
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:NtWriteFile
}
{
   wine_bug_20548_WS_shutdown
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:WS2_register_async_shutdown
   fun:WS_shutdown
}
{
   todo_tls_leak_wine_bug_20552
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:alloc_thread_tls
   fun:MODULE_DllThreadAttach
   fun:start_thread
}
{
   wine_bug_20654
   Memcheck:Leak
   ...
   fun:RtlAllocateHeap
   fun:get_full_path_helper
   fun:RtlGetFullPathName_U
}
{
   # This leak is expected - wine doesn't have a reliable way to free the default provider on exit.
   wine_bug_20679
   Memcheck:Leak
   ...
   fun:CRYPT_GetDefaultProvider
}
{
   # Benign window title leak?
   wine_bug_20692_wontfix
   Memcheck:Leak
   ...
   fun:DEFWND_SetText*
   ...
   fun:CreateWindow*
}
{
   wine_bug_21045
   Memcheck:Leak
   fun:RtlAllocateHeap
   fun:SECUR32_addPackages
   fun:SECUR32_initNegotiateSP
}
{
   expected_double_free_wintrust_tests_crypt
   Memcheck:Addr4
   fun:CryptCATAdminReleaseContext
   fun:test_context
   fun:func_crypt
   fun:run_test
   fun:main
}
{
   expected_bad_pointer_wininet_tests_http
   Memcheck:Addr1
   fun:HttpOpenRequestA
   fun:test_bogus_accept_types_array
   fun:func_http
   fun:run_test
   fun:main
}
{
   expected_use_after_free_user32_tests_dialog
   Memcheck:Addr4
   fun:DIALOG_CreateIndirect
   fun:DialogBoxParamA
   fun:test_DialogBoxParamA
   fun:func_dialog
   fun:run_test
   fun:main
}
{
   expected_12345678_ptr_user32_tests_class
   Memcheck:Addr2
   fun:RtlImageNtHeader
   fun:RtlImageDirectoryEntryToData
   fun:find_entry
   fun:LdrFindResource_U
   fun:find_resourceA
   fun:FindResourceExA
   fun:FindResourceA
   fun:LoadMenuA
   fun:WIN_CreateWindowEx
   fun:CreateWindowExA
   fun:check_instance_
   fun:test_instances
   fun:func_class
   fun:run_test
   fun:main
}
{
   expected_advapi32_tests_crypt_badparams
   Memcheck:Addr4
   ...
   fun:test_incorrect_api_usage
   fun:func_crypt
   fun:run_test
   fun:main
}
{
   # These aren't even in wine, but in a helper app wine runs
   ntlm_auth_leaks
   Memcheck:Leak
   ...
   obj:/usr/bin/ntlm_auth
}
{
   ntlm_auth_leaks
   Memcheck:Leak
   ...
   fun:poptGetNextOpt
   fun:main
}
{
   expected_wininet_tests_http_test_bogus_accept_types_array
   Memcheck:Addr1
   fun:HttpOpenRequestA
   fun:test_bogus_accept_types_array
   fun:func_http
   fun:run_test
   fun:main
}
{
   expected_advapi32_tests_crypt_see_wine_bug_20918
   Memcheck:Addr4
   fun:*
   fun:test_incorrect_api_usage
   fun:func_crypt
   fun:run_test
   fun:main
}
{
   expected_crypt32_tests_crypt_see_wine_bug_20984
   Memcheck:Leak
   fun:notify_alloc
   fun:RtlAllocateHeap
   fun:new_object
   fun:new_key
   fun:import_public_key
   fun:import_key
   fun:RSAENH_CPImportKey
   fun:CryptImportKey
   fun:CRYPT_ImportRsaPublicKeyInfoEx
   fun:CryptImportPublicKeyInfoEx
   fun:CryptImportPublicKeyInfo
   fun:CDecodeSignedMsg_VerifySignatureWithKey
   fun:CDecodeSignedMsg_VerifySignature
   fun:CDecodeMsg_Control
   fun:CryptMsgControl
   fun:CryptVerifyDetachedMessageSignature
   fun:test_verify_detached_message_signature
}