# There are three kinds of suppressions in this file:
# 1. Third party stuff we have no control over.
#
# 2. Intentional unit test errors, stuff that is somehow a false positive
# in our own code, or stuff that is so trivial it's not worth fixing.
#
# 3. Suppressions for real chromium bugs that are not yet fixed.
# These should all be in chromium's bug tracking system.
# Periodically we should sweep this file and the bug tracker clean by
# running overnight and removing outdated bugs/suppressions.
#
# TODO(rnk): Should we move all of the Linux-only system library suppressions
# over from suppressions.txt?  We'd avoid wasting time parsing and matching
# suppressions on non-Linux, which is basically just Mac.
#
#-----------------------------------------------------------------------

# 1. Third party stuff we have no control over.

# 2. Intentional unit test errors, stuff that is somehow a false positive
# in our own code, or stuff that is so trivial it's not worth fixing.

# 3. Suppressions for real chromium bugs that are not yet fixed.
{
   bug_436253
   Memcheck:Overlap
   fun:memcpy@@GLIBC_2.14
   fun:_ZN7content14WebPreferencesaSERKS0_
   fun:_ZN7content14RenderViewImpl22OnUpdateWebPreferencesERKNS_14WebPreferencesE
   fun:_ZN7content14RenderViewImpl20SetWebkitPreferencesERKNS_14WebPreferencesE
   fun:_ZThn*_N7content14RenderViewImpl20SetWebkitPreferencesERKNS_14WebPreferencesE
   fun:_ZN7content16WebKitTestRunner5ResetEv
}
{
   bug_436292
   Memcheck:Param
   sendmsg(msg.msg_iov[0])
   ...
   fun:MojoWriteMessage
   fun:_ZN3IPC8internal13MessageReader4SendE10scoped_ptrINS_7MessageEN4base14DefaultDeleterIS3_EEE
   fun:_ZN3IPC11ChannelMojo4SendEPNS_7MessageE
   fun:_ZN7content20BrowserMessageFilter4SendEPN3IPC7MessageE
   fun:_ZN7content17AudioRendererHost18DoCompleteCreationEi
}
{
   bug_436292_b
   Memcheck:Param
   sendmsg(msg.msg_iov[0])
   ...
   fun:MojoWriteMessage
   fun:_ZN3IPC8internal13MessageReader4SendE10scoped_ptrINS_7MessageEN4base14DefaultDeleterIS3_EEE
   fun:_ZN3IPC11ChannelMojo17InitMessageReaderEN4mojo16ScopedHandleBaseINS1_17MessagePipeHandleEEEi
   fun:_ZN3IPC12_GLOBAL__N_117ServerChannelMojo27ClientChannelWasInitializedEi
}
{
   bug_452002
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN11leveldb_env11ChromiumEnv11StartThreadEPFvPvES1_
   fun:_ZN11leveldb_env11ChromiumEnv8ScheduleEPFvPvES1_
   fun:_ZN7leveldb6DBImpl23MaybeScheduleCompactionEv
   fun:_ZN7leveldb6DBImpl16MakeRoomForWriteEb
   fun:_ZN7leveldb6DBImpl5WriteERKNS_12WriteOptionsEPNS_10WriteBatchE
   fun:_ZN17LeveldbValueStore9WriteToDbEPN7leveldb10WriteBatchE
   fun:_ZN17LeveldbValueStore3SetEiRKSsRKN4base5ValueE
   fun:_ZN10extensions28SettingsStorageQuotaEnforcer3SetEiRKSsRKN4base5ValueE
   fun:_ZN10extensions28WeakUnlimitedSettingsStorage3SetEiRKSsRKN4base5ValueE
   fun:_ZN10extensions12_GLOBAL__N_1L33UnlimitedLocalStorageTestCallbackEP10ValueStore
}
