# This file is used in addition to the one already maintained in Chrome.
# It acts as a place holder for future additions for WebRTC.
# It must exist for the Python wrapper script to work properly.

# There are three kinds of suppressions in this file.
# 1. third_party libraries
# 2. webrtc stuff
# 3. libjingle stuff (talk folder)
#-----------------------------------------------------------------------

# third_party libraries

{
   libc_free_hitting_gce_vms
   Memcheck:Free
   fun:free
   fun:__libc_freeres
   fun:_vgnU_freeres
   ...
}
{
   Ubuntu_Precise_Itoa_Optimized_Code
   Memcheck:Uninitialized
   fun:_itoa_word
   fun:vfprintf
   fun:vsnprintf
   fun:snprintf
   ...
}

#-----------------------------------------------------------------------
# webrtc stuff

{
   bug_6784
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN3rtc10HttpServer16HandleConnectionEPNS_15StreamInterfaceE
   fun:_ZN3rtc12_GLOBAL__N_122CreateClientConnectionERNS_10HttpServerERNS0_17HttpServerMonitorEb
   fun:_ZN3rtc47HttpServer_SignalsCloseAfterForcedCloseAll_Test8TestBodyEv
}
{
   bug_6773_3
   Memcheck:Uninitialized
   fun:vfprintf
   fun:vsnprintf
   fun:snprintf
   fun:_ZN7testing12_GLOBAL__N_126PrintByteSegmentInObjectToEPKhmmPSo
   fun:_ZN7testing9internal220PrintBytesInObjectToEPKhmPSo
   fun:_ZN7testing8internal14DefaultPrintToISt6vectorIN6webrtc4rtcp3Fir7RequestESaIS6_EEEEviNS0_13bool_constantILb0EEERKT_PSo
   fun:_ZN7testing8internal20MatchPrintAndExplainIKSt6vectorIN6webrtc4rtcp3Fir7RequestESaIS6_EERS9_EEbRT_RKNS_7MatcherIT0_EEPNS_19MatchResultListenerE
   fun:_ZNK7testing8internal29PredicateFormatterFromMatcherINS0_18ElementsAreMatcherISt5tupleIJNS0_13BothOfMatcherINS_18PolymorphicMatcherINS0_12FieldMatcherIN6webrtc4rtcp3Fir7RequestEjEEEENS5_INS6_ISA_hEEEEEESF_EEEEEclISt6vectorISA_SaISA_EEEENS_15AssertionResultEPKcRKT_
   fun:_ZN6webrtc36RtcpPacketFirTest_TwoFciEntries_Test8TestBodyEv
}
{
   bug_6773_2
   Memcheck:Uninitialized
   fun:vfprintf
   fun:vsnprintf
   fun:snprintf
   fun:_ZN7testing12_GLOBAL__N_126PrintByteSegmentInObjectToEPKhmmPSo
   fun:_ZN7testing9internal220PrintBytesInObjectToEPKhmPSo
   fun:_ZN7testing8internal25UntypedFunctionMockerBase17UntypedInvokeWithEPKv
   fun:_ZNK6webrtc11MockRtpRtcp11FlexfecSsrcEv
   fun:_ZN6webrtc12PacketRouter16TimeToSendPacketEjtlbi
   fun:_ZN6webrtc38PacketRouterTest_TimeToSendPacket_Test8TestBodyEv
}
{
   bug_6773_1
   Memcheck:Uninitialized
   fun:vfprintf
   fun:vsnprintf
   fun:snprintf
   fun:_ZN7testing12_GLOBAL__N_126PrintByteSegmentInObjectToEPKhmmPSo
   fun:_ZN7testing9internal220PrintBytesInObjectToEPKhmPSo
   fun:_ZN7testing8internal14DefaultPrintToISt6vectorIN6webrtc4rtcp3Fir7RequestESaIS6_EEEEviNS0_13bool_constantILb0EEERKT_PSo
   fun:_ZN7testing8internal20MatchPrintAndExplainIKSt6vectorIN6webrtc4rtcp3Fir7RequestESaIS6_EERS9_EEbRT_RKNS_7MatcherIT0_EEPNS_19MatchResultListenerE
   fun:_ZNK7testing8internal29PredicateFormatterFromMatcherINS0_18ElementsAreMatcherISt5tupleIJNS0_13BothOfMatcherINS_18PolymorphicMatcherINS0_12FieldMatcherIN6webrtc4rtcp3Fir7RequestEjEEEENS5_INS6_ISA_hEEEEEEEEEEEclISt6vectorISA_SaISA_EEEENS_15AssertionResultEPKcRKT_
   fun:_ZN6webrtc28RtcpPacketFirTest_Parse_Test8TestBodyEv
}
{
   bug_3446
   Memcheck:Uninitialized
   fun:vp8cx_pick_filter_level_fast
   fun:vp8_loopfilter_frame
   fun:encode_frame_to_data_rate
   fun:vp8_get_compressed_data
   fun:vp8e_encode
   fun:vpx_codec_encode
   ...
   fun:_ZN6webrtc4test18VideoProcessorImpl12ProcessFrameEi
   fun:_ZN6webrtc29VideoProcessorIntegrationTest22ProcessFramesAndVerifyENS_14QualityMetricsENS_11RateProfileENS_15CodecConfigParsEPNS_18RateControlMetricsE
   fun:_ZN6webrtc70VideoProcessorIntegrationTest_ProcessNoLossSpatialResizeFrameDrop_Test8TestBodyEv
}
{
   bug_1976_1
   Memcheck:Unaddressable
   fun:pthread_mutex_unlock
   fun:_ZN9rtc15CriticalSection5LeaveEv
   fun:_ZN9rtc9CritScopeD1Ev
   ...
   fun:_ZN9rtc6Thread15ProcessMessagesEi
   fun:_ZN9rtc6Thread3RunEv
   fun:_ZN9rtc6Thread6PreRunEPv
}
{
   bug_2100_3
   Memcheck:Uninitialized
   fun:tls1_enc
   fun:ssl3_get_record
   fun:ssl3_read_bytes
   fun:ssl3_read_internal
   fun:ssl3_read
   fun:SSL_read
   fun:_ZN9rtc20OpenSSLStreamAdapter4ReadEPvmPmPi
   ...
}
{
   bug_2100_4
   Memcheck:Uninitialized
   fun:_ZN7testing8internal11CmpHelperEQIjhEENS_15AssertionResultEPKcS4_RKT_RKT0_
   fun:_ZN7testing8internal8EqHelperILb0EE7CompareIjhEENS_15AssertionResultEPKcS6_RKT_RKT0_
   fun:_ZN24SSLStreamAdapterTestDTLS8ReadDataEPN9rtc15StreamInterfaceE
   ...
}
{
   bug_2100_5
   Memcheck:Uninitialized
   fun:dtls1_process_record
   fun:dtls1_get_record
   fun:dtls1_read_bytes
   fun:ssl3_read_internal
   fun:ssl3_read
   fun:SSL_read
   fun:_ZN9rtc20OpenSSLStreamAdapter4ReadEPvmPmPi
   ...
}
{
   BIO_new_mem_buf_1
   Memcheck:Leak
   fun:malloc
   fun:default_malloc_ex
   fun:CRYPTO_malloc
   fun:BUF_MEM_new
   fun:mem_new
   fun:BIO_set
   fun:BIO_new
   fun:BIO_new_mem_buf
   fun:_ZN9rtc18OpenSSLCertificate13FromPEMStringERKSs
   ...
}
{
   BIO_new_mem_buf_2
   Memcheck:Leak
   fun:malloc
   fun:default_malloc_ex
   fun:CRYPTO_malloc
   fun:BUF_MEM_new
   fun:mem_new
   fun:BIO_set
   fun:BIO_new
   fun:BIO_new_mem_buf
   fun:_ZN9rtc15OpenSSLIdentity14FromPEMStringsERKSsS2_
}
{
   SignalsCloseAfterForcedCloseAll
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN3rtc10HttpServer10Connection12BeginProcessEPNS_15StreamInterfaceE
   ...
}
{
   SignalsCloseAfterForcedCloseAll2
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsSsEEE8allocateEmPKv
   fun:_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_EN3rtc5ilessESaIS2_EE11_M_get_nodeEv
   fun:_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_EN3rtc5ilessESaIS2_EE14_M_create_nodeIJS2_EEEPSt13_Rb_tree_nodeIS2_EDpOT_
   fun:_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_EN3rtc5ilessESaIS2_EE10_M_insert_IS2_EESt17_Rb_tree_iteratorIS2_EPKSt18_Rb_tree_node_baseSE_OT_
   fun:_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_EN3rtc5ilessESaIS2_EE15_M_insert_equalIS2_EESt17_Rb_tree_iteratorIS2_EOT_
   fun:_ZNSt8multimapISsSsN3rtc5ilessESaISt4pairIKSsSsEEE6insertIS4_vEESt17_Rb_tree_iteratorIS4_EOT_
   fun:_ZN3rtc8HttpData12changeHeaderERKSsS2_NS0_13HeaderCombineE
   fun:_ZN3rtc8HttpData9setHeaderERKSsS2_b
   fun:_ZN3rtc8HttpData9setHeaderENS_10HttpHeaderERKSsb
   ...
}
{
   DoNotDeleteTask2
   Memcheck:Leak
   fun:_Znw*
   ...
   fun:_ZN3rtc41unstarted_task_test_DoNotDeleteTask2_Test8TestBodyEv
}
{
   bug_329_1
   Memcheck:Unaddressable
   fun:I422ToARGBRow_SSSE3
   fun:I420ToARGB
   fun:ConvertFromI420
   fun:_ZN6webrtc15ConvertFromI420EPKhiNS_9VideoTypeEiiiPh
   fun:_ZN6webrtc15VideoX11Channel12DeliverFrameEPhij
   fun:_ZN6webrtc15VideoX11Channel11RenderFrameEjRNS_10VideoFrameE
   fun:_ZN6webrtc19IncomingVideoStream26IncomingVideoStreamProcessEv
   fun:_ZN6webrtc19IncomingVideoStream28IncomingVideoStreamThreadFunEPv
   fun:_ZN6webrtc11ThreadPosix3RunEv
   fun:StartThread
}

{
   bug_329_3
   Memcheck:Unaddressable
   fun:I422ToARGBRow_SSSE3
   fun:I420ToARGB
   fun:ConvertFromI420
   fun:_ZN6webrtc15ConvertFromI420EPKhiNS_9VideoTypeEiiiPh
   fun:_ZN6webrtc15VideoX11Channel12DeliverFrameEPhij
   fun:_ZN6webrtc15VideoX11Channel11RenderFrameEjRNS_10VideoFrameE
   fun:_ZN6webrtc19IncomingVideoStream26IncomingVideoStreamProcessEv
   fun:_ZN6webrtc19IncomingVideoStream28IncomingVideoStreamThreadFunEPv
   fun:_ZN6webrtc11ThreadPosix3RunEv
   fun:StartThread
}

{
   bug_329_7
   Memcheck:Unaddressable
   fun:I422ToARGBRow_SSSE3
   fun:I420ToARGB
   fun:ConvertFromI420
   fun:_ZN6webrtc15ConvertFromI420ERKNS_10VideoFrameEiNS_9VideoTypeEiPh
   fun:_ZN6webrtc15VideoX11Channel12DeliverFrameERKNS_10VideoFrameE
   fun:_ZN6webrtc15VideoX11Channel11RenderFrameEjRNS_10VideoFrameE
   fun:_ZN6webrtc19IncomingVideoStream26IncomingVideoStreamProcessEv
   fun:_ZN6webrtc19IncomingVideoStream28IncomingVideoStreamThreadFunEPv
   fun:_ZN6webrtc11ThreadPosix3RunEv
   fun:StartThread
}

{
   bug_329_8
   Memcheck:Unaddressable
   fun:I422ToARGBRow_SSSE3
   fun:I420ToARGB
   fun:ConvertFromI420
   fun:_ZN6webrtc15ConvertFromI420ERKNS_10VideoFrameEiNS_9VideoTypeEiPh
   fun:_ZN6webrtc15VideoX11Channel12DeliverFrameERKNS_10VideoFrameE
   fun:_ZN6webrtc15VideoX11Channel11RenderFrameEjRNS_10VideoFrameE
   fun:_ZN6webrtc19IncomingVideoStream26IncomingVideoStreamProcessEv
   fun:_ZN6webrtc19IncomingVideoStream28IncomingVideoStreamThreadFunEPv
   fun:_ZN6webrtc11ThreadPosix3RunEv
   fun:StartThread
}

{
   bug_898_1
   Memcheck:Uninitialized
   ...
   fun:_ZN16FakeMediaProcess7ProcessEiN6webrtc15ProcessingTypesEPsiib
   ...
   fun:_ZN6webrtc21AudioDeviceLinuxPulse17PlayThreadProcessEv
   fun:_ZN6webrtc21AudioDeviceLinuxPulse14PlayThreadFuncEPv
   fun:_ZN6webrtc11ThreadPosix3RunEv
   fun:StartThread
}

{
   bug_898_2
   Memcheck:Uninitialized
   ...
   fun:_ZN16FakeMediaProcess7ProcessEiN6webrtc15ProcessingTypesEPsiib
   ...
   fun:_ZN6webrtc21AudioDeviceLinuxPulse16RecThreadProcessEv
   fun:_ZN6webrtc21AudioDeviceLinuxPulse13RecThreadFuncEPv
   fun:_ZN6webrtc11ThreadPosix3RunEv
   fun:StartThread
}

{
   bug_891
   Memcheck:Unaddressable
   fun:XShmPutImage
   fun:_ZN6webrtc15VideoX11Channel12DeliverFrameEPhij
   fun:_ZN6webrtc15VideoX11Channel11RenderFrameEjRNS_10VideoFrameE
   fun:_ZN6webrtc19IncomingVideoStream26IncomingVideoStreamProcessEv
   fun:_ZN6webrtc19IncomingVideoStream28IncomingVideoStreamThreadFunEPv
   fun:_ZN6webrtc11ThreadPosix3RunEv
   fun:StartThread
}

{
   ignore_common_benevolent_trace_library_errors
   Memcheck:Uninitialized
   ...
   fun:vsnprintf
   fun:_ZN6webrtc5Trace3AddENS_10TraceLevelENS_11TraceModuleEiPKcz
   ...
}

{
   bug_270_1
   Memcheck:Uninitialized
   ...
   fun:WebRtcNetEQ_RecOutInternal
   fun:WebRtcNetEQ_RecOut
   ...
}

{
   bug_270_2
   Memcheck:Uninitialized
   fun:WebRtcNetEQ_GetSpeechOutputType
   ...
}


#-----------------------------------------------------------------------
# libjingle stuff (talk folder)
{
   bug_2056_1
   Memcheck:Leak
   fun:malloc
   fun:_dl_close_worker
   fun:_dl_close
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlclose
   ...
   fun:snd_device_name_hint
   fun:_ZNK6webrtc20AudioDeviceLinuxALSA14GetDevicesInfoEibiPci
   ...
}
{
   bug_2100_1
   Memcheck:Uninitialized
   fun:_ZN7testing8internal11CmpHelperEQIiiEENS_15AssertionResultEPKcS4_RKT_RKT0_
   fun:_ZN7testing8internal8EqHelperILb1EE7CompareIiiEENS_15AssertionResultEPKcS6_RKT_RKT0_PNS0_8EnableIfIXntsrNS0_10is_pointerISA_EE5valueEE4typeE
   ...
}
{
   bug_2100_2
   Memcheck:Uninitialized
   fun:bcmp
   fun:_ZN23SSLStreamAdapterTestTLS12TestTransferEi
   ...
}
# For tests that create XMPPClient which can only be deleted by task runner.
{
   HangoutPubSubClientTest
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN*HangoutPubSubClientTest*Ev
}
{
   MucRoomConfigTaskTest
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN21MucRoomConfigTaskTest5SetUpEv
}
{
   MucRoomDiscoveryTaskTest
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN24MucRoomDiscoveryTaskTest5SetUpEv
}
{
   MucRoomLookupTaskTest
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN21MucRoomLookupTaskTest5SetUpEv
}
{
   MucRoomUniqueHangoutIdTaskTest
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN30MucRoomUniqueHangoutIdTaskTest5SetUpEv
}
{
   PingTaskTest
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN12PingTaskTest5SetUpEv
}
{
   PubSubClientTest
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN*PubSubClientTest*Ev
}
{
   PubSubTasksTest
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN*PubSubTasksTest*Ev
}
# failures which can't be reproduced locally
{
   bug_2153_1
   Memcheck:Leak
   fun:calloc
   ...
   fun:_ZN6webrtc26AudioMixerManagerLinuxALSA11OpenSpeakerEPc
   fun:_ZN6webrtc20AudioDeviceLinuxALSA11InitSpeakerEv
   ...
}
{
   bug_2153_3
   Memcheck:Leak
   fun:calloc
   obj:*
   fun:_ZN6webrtc26AudioMixerManagerLinuxALSA14OpenMicrophoneEPc
   fun:_ZN6webrtc20AudioDeviceLinuxALSA14InitMicrophoneEv
   ...
}
{
   bug_2263_1
   Memcheck:Uninitialized
   fun:_ZN14DtlsTestClient12VerifyPacketEPKcmPj
   ...
}
{
   bug_3478
   Memcheck:Leak
   fun:_Znw*
   fun:_ZNK3rtc18FakeSSLCertificate12GetReferenceEv
   fun:_ZN3rtc18FakeSSLCertificate7DupCertES0_
   fun:_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPKN3rtc18FakeSSLCertificateESt6vectorIS3_SaIS3_EEEENS1_IPPNS2_14SSLCertificateES6_ISB_SaISB_EEEEPFPS3_S3_EET0_T_SK_SJ_T1_
   fun:_ZNK3rtc18FakeSSLCertificate8GetChainEPPNS_12SSLCertChainE
   fun:_ZN6webrtc14StatsCollector21AddCertificateReportsEPKN3rtc14SSLCertificateE
   fun:_ZN6webrtc14StatsCollector18ExtractSessionInfoEv
   fun:_ZN6webrtc14StatsCollector11UpdateStatsENS_23PeerConnectionInterface16StatsOutputLevelE
   fun:_ZN12_GLOBAL__N_118StatsCollectorTest22TestCertificateReportsERKN3rtc18FakeSSLCertificateERKSt6vectorISsSaISsEES4_S9_
   fun:_ZN12_GLOBAL__N_156StatsCollectorTest_ChainedCertificateReportsCreated_Test8TestBodyEv
}
{
   bug_5983
   Memcheck:Uninitialized
   fun:_ZN6webrtc11DataChannel4InitERKNS_23InternalDataChannelInitE
   ...
}
{
   bug_5984
   Memcheck:Uninitialized
   fun:_ZN6webrtc15GainControlImpl19ProcessCaptureAudioEPNS_11AudioBufferEb
   ...
}
{
   bug_5986
   Memcheck:Unaddressable
   fun:silk_stereo_LR_to_MS
   fun:silk_Encode
   fun:opus_encode_native
   ...
}
{
   bug_5987
   Memcheck:Leak
   fun:_Znw*
   fun:_ZN6webrtc51AudioEncoderCopyRedDeathTest_NullSpeechEncoder_Test8TestBodyEv
}
{
   bug_5988
   Memcheck:Leak
   fun:_Znw*
   fun:_ZNSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_EN3rtc5ilessESaIS2_EE15_M_insert_equalIS2_EESt17_Rb_tree_iteratorIS2_EOT_
   fun:_ZN3rtc8HttpData12changeHeaderERKSsS2_NS0_13HeaderCombineE
   fun:_ZN3rtc16HttpResponseData9set_errorEj
   fun:_ZN3rtc12_GLOBAL__N_117HttpServerMonitor9OnRequestEPNS_10HttpServerEPNS_21HttpServerTransactionE
   fun:_ZN3rtc10HttpServer10Connection14onHttpCompleteENS_8HttpModeENS_9HttpErrorE
   fun:_ZN3rtc8HttpBase10OnCompleteENS_9HttpErrorE
   fun:_ZN3rtc8HttpBase17OnHttpStreamEventEPNS_15StreamInterfaceEii
   fun:_ZN7testing12StreamSource11QueueStringEPKc
   fun:_ZN3rtc12_GLOBAL__N_122CreateClientConnectionERNS_10HttpServerERNS0_17HttpServerMonitorEb
   fun:_ZN3rtc47HttpServer_SignalsCloseAfterForcedCloseAll_Test8TestBodyEv
}
{
   bug_5989
   Memcheck:Unaddressable
   ...
   fun:_ZNK3rtc15CriticalSection5EnterEv
   ...
}
{
   bug_687087
   Memcheck:Uninitialized
   fun:vfprintf
   fun:vsnprintf
   fun:snprintf
   fun:_ZN7testing12_GLOBAL__N_126PrintByteSegmentInObjectToEPKhmmPSo
   fun:_ZN7testing9internal220PrintBytesInObjectToEPKhmPSo
   fun:_ZN7testing8internal25UntypedFunctionMockerBase17UntypedInvokeWithEPKv
   fun:_ZNK6webrtc11MockRtpRtcp11FlexfecSsrcEv
   ...
}
