# There are three kinds of suppressions in this file.
# 1. Third party leaks we have no control over.
#
# 2. Intentional unit test errors, false positives
# in our own code, or leaks that are so trivial they are not worth fixing.
#
# 3. Suppressions for real WebKit bugs that are not yet fixed.
# These should all be in webkit's bug tracking system
# Periodically we should sweep this file and the bug tracker clean by
# running overnight and removing outdated bugs/suppressions.
#-----------------------------------------------------------------------

# 1. Third party leaks we have no control over.
{
   # GTK developers don't like cleaning up one-time leaks.
   # See http://mail.gnome.org/archives/gtk-devel-list/2004-April/msg00230.html.
   gtk_init_check (Third Party)
   Memcheck:Leak
   ...
   fun:gtk_init_check
}

{
   FcConfigParseAndLoad (Third Party)
   Memcheck:Leak
   ...
   fun:XML_ParseBuffer
   fun:FcConfigParseAndLoad
}

{
   FcConfigAppFontAddFile (Third Party)
   Memcheck:Leak
   ...
   fun:FcConfigAppFontAddFile
}

{
   # See also http://www.gnome.org/~johan/gtk.suppression
   # (which has a smattering of similar pango suppressions).
   FcFontRenderPrepare 1 (Third Party)
   Memcheck:Leak
   ...
   fun:FcFontRenderPrepare
   obj:*
   fun:pango_font_map_load_fontset
}

{
   FcFontRenderPrepare 2 (Third Party)
   Memcheck:Leak
   ...
   fun:FcFontRenderPrepare
   ...
   fun:pango_itemize_with_base_dir
}

{
   FcFontRenderPrepare 3 (Third Party)
   Memcheck:Leak
   ...
   fun:FcFontRenderPrepare
   ...
   fun:pango_ot_buffer_output
}

{
   FcFontRenderPrepare 4 (Third Party)
   Memcheck:Leak
   ...
   fun:FcFontRenderPrepare
   ...
   fun:pango_context_get_metrics
}

{
   FcDefaultSubstitute (Third Party)
   Memcheck:Leak
   ...
   fun:FcDefaultSubstitute
   ...
   fun:pango_itemize_with_base_dir
}

{
   # Reported in https://bugs.freedesktop.org/show_bug.cgi?id=8215.
   FcPatternObjectInsertElt 1 (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:FcPatternObjectInsertElt
   fun:FcPatternObjectAddWithBinding
}

{
   # See https://bugs.freedesktop.org/show_bug.cgi?id=8428.
   # and http://www.gnome.org/~johan/gtk.suppression.
   FcPatternObjectInsertElt 2 (Third Party)
   Memcheck:Leak
   ...
   fun:realloc
   fun:FcPatternObjectInsertElt
}

{
   FcConfigValues (Third Party)
   Memcheck:Leak
   ...
   fun:malloc
   fun:FcConfigValues
   fun:FcConfigValues
   ...
   fun:FcConfigValues
   fun:FcConfigValues
}

{
   FcCharSetSort (Third Party)
   Memcheck:Leak
   ...
   fun:FcFontSetSort
   fun:FcFontSort
}

{
   FcCharSetAddChar (Third Party)
   Memcheck:Leak
   ...
   fun:FcCharSetFindLeafCreate
   fun:FcCharSetAddChar
}

{
   pango_script_get_sample_language (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_strdup
   fun:pango_script_get_sample_language
   ...
   fun:pango_font_get_metrics
}

{
   # See http://sourceware.org/bugzilla/show_bug.cgi?id=12878.
   dlopen (Third Party)
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
}

{
   # See also http://sources.redhat.com/bugzilla/show_bug.cgi?id=2451.
   _dl_map_object_from_fd (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:_dl_map_object_from_fd
}

{
   # See http://sources.redhat.com/bugzilla/show_bug.cgi?id=5171
   pthread_create (Third Party)
   Memcheck:Leak
   fun:calloc
   fun:allocate_dtv
   fun:_dl_allocate_tls
   fun:pthread_create@@GLIBC_2.1
}

{
   # See http://sourceware.org/bugzilla/show_bug.cgi?id=14015.
   dlsym (Third Party)
   Memcheck:Leak
   fun:calloc
   fun:_dlerror_run
   fun:dlsym
}

{
   g_object_add_weak_pointer (Third Party)
   Memcheck:Leak
   ...
   fun:g_object_weak_ref
   fun:g_object_add_weak_pointer
}

{
   g_build_filename (Third Party)
   Memcheck:Leak
   fun:realloc
   fun:g_realloc
   fun:g_string_maybe_expand
   fun:g_string_insert_len
   fun:g_build_path_va
   fun:g_build_filename
   fun:_ZL15initializeFontsPKc
}

{
   gtk_im_context_set_client_window (Third Party)
   Memcheck:Leak
   ...
   fun:malloc
   fun:g_malloc
   fun:g_strdup
   fun:gtk_im_multicontext_set_client_window
   fun:gtk_im_context_set_client_window
}

{
   gtk_css_provider_load_from_data (Third Party)
   Memcheck:Leak
   fun:realloc
   fun:g_realloc
   fun:g_string_maybe_expand
   fun:g_string_insert_c
   fun:_gtk_css_parser_read_char
   fun:_gtk_css_parser_try_ident
   fun:bindings_value_parse_one
   fun:_gtk_css_array_value_parse
   fun:gtk_css_provider_load_internal
   fun:gtk_css_provider_load_from_data
}

{
   # GTK leaks an X11 window.
   gdk_x11_drawable_get_xid (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:g_slice_alloc0
   fun:g_type_create_instance
   fun:g_object_constructor
   fun:g_object_newv
   fun:g_object_new
   fun:_gdk_window_impl_new
   fun:gdk_window_ensure_native
   fun:gdk_x11_drawable_get_xid
}

{
   # GTK leaks a cairo context (large leak)
   gtk_window_realize (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:_cairo_default_context_create
   fun:set_grip_shape
   fun:resize_grip_create_window
   fun:gtk_window_realize
}

{
   g_quark_from_static_string (Third party)
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_quark_from_static_string
   fun:gobject_init_ctor
   fun:call_init.part.0
   fun:_dl_init
   obj:/lib/x86_64-linux-gnu/ld-2.15.so
   obj:*
   obj:*
   obj:*
}

{
   /bin/bash (Third Party)
   Memcheck:Leak
   ...
   obj:/bin/bash
}

{
   libenchant.so new (Third party)
   Memcheck:Leak
   fun:_Znw*
   ...
   obj:*/libenchant.so.1.6.0
   fun:enchant_broker_dict_exists
}

{
   libenchant.so malloc (Third party)
   Memcheck:Leak
   fun:*alloc
   ...
   obj:*/libenchant.so.1.6.0
   fun:enchant_broker_dict_exists
}

{
   # Cairo leaks a pattern_t* in cairo_set_source_surface
   cairo_set_source_surface (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:cairo_pattern_create_for_surface
   fun:_cairo_default_context_set_source_surface
   fun:cairo_set_source_surface
}

{
   XRRFindDisplay (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:XRRFindDisplay
}
{
   libflashplayer.so (Third Party)
   Memcheck:Leak
   ...
   obj:/usr/lib/flashplugin-installer/libflashplayer.so
}

{
   gdk_init (Third Party)
   Memcheck:Leak
   fun:malloc
   ...
   fun:_nl_find_domain
   fun:__dcigettext
   fun:gdk_screen_class_intern_init
   fun:g_type_class_ref
   fun:g_type_class_ref
   fun:g_object_newv
   fun:g_object_new
   fun:_gdk_x11_screen_new
   fun:gdk_display_open
   fun:gdk_display_open_default_libgtk_only
   fun:gdk_init_check
   fun:gdk_init
}

{
   XKeysymToString (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:XKeysymToString
}

{
   g_thread_proxy (Third Party)
   Memcheck:Leak
   fun:*alloc
   ...
   fun:g_thread_proxy
}

{
   JNI_CreateJavaVM (Third party)
   Memcheck:Leak
   ...
   fun:JNI_CreateJavaVM
   fun:JavaMain
}

{
   _ZL10java_startP6Thread (Third party)
   Memcheck:Leak
   ...
   fun:_ZN8VMThread3runEv
   fun:_ZL10java_startP6Thread
   ...

}

{
   /bin/java (OpenJDK) (Third party)
   Memcheck:Leak
   ...
   obj:/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
   ...
}

{
   libGL.so (Third party)
   Memcheck:Leak
   ...
   obj:*/libGL.so.*
   ...
}

{
   _cairo_xlib_shm_surface_create.isra.11 (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:_pixman_image_allocate
   fun:pixman_image_create_bits
   fun:_cairo_xlib_shm_surface_create.isra.11
}

{
   __nss_database_lookup (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:nss_parse_service_list
   fun:__nss_database_lookup
   obj:*
}

{
   gst_init_check (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_intern_string
   fun:_priv_gst_registry_chunks_load_plugin
   fun:exchange_packets
   fun:plugin_loader_load
   fun:gst_registry_scan_plugin_file
   fun:gst_registry_scan_path_level
   fun:gst_registry_scan_path_internal
   fun:gst_update_registry
   fun:init_post
   fun:g_option_context_parse
   fun:gst_init_check

}

{
   g_task_run_in_thread (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:g_slice_alloc0
   fun:g_system_thread_new
   fun:g_thread_new_internal
   fun:g_thread_pool_start_thread
   fun:g_thread_pool_push
   fun:g_task_start_task_thread
   fun:g_task_run_in_thread
}

{
   # Large leak in cairo_image_surface_create
   _cairo_image_surface_create_with_pixman_format (Third Party)
   Memcheck:Leak
   fun:malloc
   fun:_cairo_image_surface_create_for_pixman_image
   fun:_cairo_image_surface_create_with_pixman_format
   fun:_ZN7WebCore21copyCairoImageSurfaceEP14_cairo_surface
}


#-----------------------------------------------------------------------
# 2. Intentional unit test errors, false positives
# in our own code, or leaks that are so trivial they are not worth fixing.

{
   # According to dglazkov, these are one-time leaks and intentional.
   # They may go away if the change to move these off the heap lands.
   WebCore::SVGNames::init (Intentional)
   Memcheck:Leak
   ...
   fun:_ZN7WebCore8SVGNames4initEv
}

{
   # This is an on demand initialization which is done and then intentionally
   # kept around (not freed) while the process is running.
   WebCore::XMLNames::init (Intentional)
   Memcheck:Leak
   ...
   fun:_ZN7WebCore8XMLNames4initEv
}

{
   # This is WebKit wide theading initialization which is intentionally kept
   # around (not freed) while the process is running.
   WTF::ThreadIdentifierData::initialize() (Intentional)
   Memcheck:Leak
   ...
   fun:_ZN3WTF20ThreadIdentifierData10initializeEj
}

{
   # This is WebKit wide theading initialization which is intentionally kept
   # around (not freed) while the process is running.
   WTF::ThreadData (Intentional)
   Memcheck:Leak
   ...
   fun:_ZN3WTF13wtfThreadDataEv
}

{
   WTF::BitVector (Intentional)
   Memcheck:Leak
   fun:malloc
   fun:_ZN3WTF10fastMallocEm
   fun:_ZN3WTF9BitVector13OutOfLineBits6createEm
   fun:_ZN3WTF9BitVector15resizeOutOfLineEm
   fun:_ZN3WTF9BitVector10ensureSizeEm
   fun:_ZN3WTF9BitVectorC1Em
}

{
   # WTF::ThreadSpecific leaks a few bytes at a time.
   WTF::ThreadSpecific::set() (Intentional)
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN3WTF14ThreadSpecificIbE3setEPb
   fun:_ZN3WTF14ThreadSpecificIbEcvPbEv
   fun:_ZN3WTF14ThreadSpecificIbEdeEv
   fun:_ZN3WTF16registerGCThreadEv
   fun:_ZN3JSC8GCThread12gcThreadMainEv
   fun:_ZN3JSC8GCThread17gcThreadStartFuncEPv
   fun:_ZN3WTFL16threadEntryPointEPv
}

{
   # DOMObjectCache memory is not freed.
   webkit_dom_document_get_default_view (Intentional)
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:_ZN6WebKit14DOMObjectCache3putEPvS1_
   fun:_ZL33webkit_dom_dom_window_constructormjP22_GObjectConstructParam
   fun:g_object_newv
   fun:g_object_new_valist
   fun:g_object_new
   fun:_ZN6WebKit13wrapDOMWindowEPN7WebCore9DOMWindowE
   fun:webkit_dom_document_get_default_view
 }

#-----------------------------------------------------------------------
# 3. Suppressions for real webkit bugs that are not yet fixed.
# These should all be in webkit's bug tracking system (but a few aren't yet).

{
   # Leak PluginObject in exceptional circumstances https://bugs.webkit.org/show_bug.cgi?id=118528
   WebCore::PluginView::start()
   Memcheck:Leak
   fun:malloc
   fun:_ZL14pluginAllocateP4_NPPP7NPClass
   fun:_NPN_CreateObject
   fun:NPP_New
   fun:_ZN7WebCore10PluginView5startEv
}

{
   Memcheck:Leak
   fun:malloc
   fun:_ZN3WTF10fastMallocEm
   fun:_ZN3WTF10fastStrDupEPKc
   fun:_ZN7WebCore12TextCodecICU14registerCodecsEPFvPKcPFN3WTF10PassOwnPtrINS_9TextCodecEEERKNS_12TextEncodingEPKvESB_E
}

{
   # DumpRenderTree WebKitWebView is leaked
   webViewCreate
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:g_slist_prepend
   fun:_ZL13webViewCreateP14_WebKitWebViewP15_WebKitWebFrame
   fun:webkit_marshal_OBJECT__OBJECT
   fun:g_closure_invoke
   fun:signal_emit_unlocked_R
   fun:g_signal_emit_valist
   fun:g_signal_emit_by_name
   fun:_ZN6WebKit12ChromeClient12createWindowEPN7WebCore5FrameERKNS1_16FrameLoadRequestERKNS1_14WindowFeaturesERKNS1_16NavigationActionE
   fun:_ZNK7WebCore6Chrome12createWindowEPNS_5FrameERKNS_16FrameLoadRequestERKNS_14WindowFeaturesERKNS_16NavigationActionE
   fun:_ZN7WebCore12createWindowEPNS_5FrameES1_RKNS_16FrameLoadRequestERKNS_14WindowFeaturesERb
   fun:_ZN7WebCore9DOMWindow12createWindowERKN3WTF6StringERKNS1_12AtomicStringERKNS_14WindowFeaturesEPS0_PNS_5FrameESD_PFvSB_PvESE_
   fun:_ZN7WebCore9DOMWindow4openERKN3WTF6StringERKNS1_12AtomicStringES4_PS0_S8_
   fun:_ZN7WebCore11JSDOMWindow4openEPN3JSC9ExecStateE
   fun:_ZN7WebCore32jsDOMWindowPrototypeFunctionOpenEPN3JSC9ExecStateE
 }
