# 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:_ZN7content15BlinkTestRunner5ResetEv
}
{
   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
}
