[Live-devel] SIGABRT in base64Decode in liveMedia/Base64.cpp

Piers Hawksley piers.hawksley at panogenics.com
Thu Jun 26 09:13:10 PDT 2014


Hi Ross,

We have rebuilt with -g and without -o0 and get the same result (SIGABRT 
in disassembled code, no stack trace).

We have tried the latest build of OpenRTSP with the -T flag. OpenRTSP 
does not send GET_PARAMETER requests to the Live555 server, so it will 
not call the code in base64Decode where the SIGABRT occurs (in the new 
or delete calls).

We are using VLC client which does send the GET_PARAMETER messages. The 
crash during GET_PARAMETER message processing appears to be related to 
truncated base 64 encoded GET_PARAMETER requests, so may be triggered by 
network congestion.

Excepts from the live555 debug (with indented lines being debug we have 
added to try to locate the crash) are attached below.

It appears that after sending the RTSP/1.0 400 Bad Request response, 
RTSPClientConnection::handleRequestBytes is called with 3 bytes, which 
sets fBase64RemainderCount to 3. Is this causing the pointer passed into 
base64Decode to go out of range ?

Please let me know if there are further tests we can do to find the 
cause and indicate a fix for this issue.

Thanks for the mention in the latest changelog ...

Best Regards,

Piers Hawksley



The following happens twice with many RTCP Liveness indications between.



RTSPClientConnection[0x1b64b8]::handleRequestBytes() read 443 new 
bytes:R0VUX1BBUkFNRVRFUiBydHNwOi8vMTAuMjYuNy44MC9zdHJlYW0wLyBSVFNQLzEuMA0KQ1NlcTogNzQNCkF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0iQWRtaW4iLCByZWFsbT0iTElWRTU1NSBTdHJlYW1pbmcgTWVkaWEiLCBub25jZT0iYTlmMDA1ODBlYTA2ZDMxYmIxNWI1ZTU4OTk1ZGFmNmIiLCB1cmk9InJ0c3A6Ly8xMC4yNi43LjgwL3N0cmVhbTAvIiwgcmVzcG9uc2U9ImMwZDgzNGQyNGY4NjE5ZjdiOTU3NmNmZjE4YjRjN2UyIg0KVXNlci1BZ2VudDogTGliVkxDLzIuMS4zIChMSVZFNTU1IFN0cmVhbWluZyBNZWRpYSB2MjAxNC4wMS4yMSkNClNlc3Npb246IDcwOTY
numBytesToDecode=440, newBase64RemainderCount=3
     out=0x27cd80
     k=330, paddingCount=0, inSize=440
     trimTrailingZeros=1
     resultSize=330
     new result=0x27cf40
     Moved out to result
     deleted out
     decodedBytes=0x27cf40
Base64-decoded 440 input bytes into 330 new bytes:GET_PARAMETER 
rtsp://10.26.7.80/stream0/ RTSP/1.0
CSeq: 74
Authorization: Digest username="Admin", realm="LIVE555 Streaming Media", 
nonce="a9f00580ea06d31bb15b5e58995daf6b", 
uri="rtsp://10.26.7.80/stream0/", 
response="c0d834d24f8619f7b9576cff18b4c7e2"
User-Agent: LibVLC/2.1.3 (LIVE555 Streaming Media v2014.01.21)
Session: 70
     Deletedd decodedBytes
     fBase64RemainderCount=3
RTSPClientConnection[0x1b64b8]::handleRequestBytes() read 13 new 
bytes:3QjVEDQoNCg==
numBytesToDecode=16, newBase64RemainderCount=0
     out=0x183708
     k=12, paddingCount=2, inSize=16
     trimTrailingZeros=1
     resultSize=10
     new result=0x183748
     Moved out to result
     deleted out
     decodedBytes=0x183748
Base64-decoded 16 input bytes into 10 new bytes:7B5D


     Deletedd decodedBytes
     fBase64RemainderCount=0
parseRTSPRequestString() failed; checking now for HTTP commands (for 
RTSP-over-HTTP tunneling)...
parseHTTPRequestString() failed!
sending response: RTSP/1.0 400 Bad Request
Date: Wed, Jun 18 2014 14:15:32 GMT
Allow: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, 
SET_PARAMETER

RTSPClientConnection[0x1b64b8]::handleRequestBytes() processing 3 new 
bytes:oNC
     numBytesToDecode=0, newBase64RemainderCount=3
     fBase64RemainderCount=3




Then after a few more RTCP Liveness indications we receive a complete 
base 64 encoded GET_PARAMETER request (with fBase64RemainderCount set to 
3) and crash.



RTSPClientConnection[0x1b64b8]::handleRequestBytes() read 456 new 
bytes:R0VUX1BBUkFNRVRFUiBydHNwOi8vMTAuMjYuNy44MC9zdHJlYW0wLyBSVFNQLzEuMA0KQ1NlcTogNzUNCkF1dGhvcml6YXRpb246IERpZ2VzdCB1c2VybmFtZT0iQWRtaW4iLCByZWFsbT0iTElWRTU1NSBTdHJlYW1pbmcgTWVkaWEiLCBub25jZT0iYTlmMDA1ODBlYTA2ZDMxYmIxNWI1ZTU4OTk1ZGFmNmIiLCB1cmk9InJ0c3A6Ly8xMC4yNi43LjgwL3N0cmVhbTAvIiwgcmVzcG9uc2U9ImMwZDgzNGQyNGY4NjE5ZjdiOTU3NmNmZjE4YjRjN2UyIg0KVXNlci1BZ2VudDogTGliVkxDLzIuMS4zIChMSVZFNTU1IFN0cmVhbWluZyBNZWRpYSB2MjAxNC4wMS4yMSkNClNlc3Npb246IDcwOTY3QjVEDQoNCg==
     numBytesToDecode=456, newBase64RemainderCount=3
     out=0x183830
     k=342, paddingCount=0, inSize=456
     trimTrailingZeros=1
     resultSize=342
     new result=0x27cd48
     Moved out to result
*** glibc detected *** /program/name: free(): invalid next size (fast): 
0x00183830 ***




More information about the live-devel mailing list