Hi Scott,
Thanks for the response.
As I mentioned, the stack goes into infinite loop while parsing the following value in "Proxy-Authorization" header.
Proxy-Authorization: Digest =AKAv0-MD5
The function resip::Auth::parseAuthParameters() goes into infinite loop as keyEnd returned by pb.skipToOneOf() is
always same as keyStart. Please refer the function "resip::Auth::parseAuthParameters()" in file rutil/parseBuffer.cxx.
This issue is not observed if there is an lvalue in Proxy-Authoriation header i.e.
Proxy-Authorization: Digest a=AKAv0-MD5
Hope the above will help you.
Thanks,
Alok
On
Tuesday, 22 April 2014 7:54 PM, Scott Godin <sgodin@xxxxxxxxxxxxxxx> wrote:
Since parseAllHeaders is being called you must have PEDANTIC_STACK preprocessor flag turned on.
Check out the code in TransactionState.cxx - search for #ifdef PEDANTIC_STACK. If we fail to parse a SIP message the exception should be caught and we call handleBadRequest which attempts to respond with 400 - assuming
there are enough good headers to allow formation of a response.
What do you mean by hanged? Does it deadlock, trap or tight spin?
Can you create a small test program, similar to resip/test/testSipMessage.cxx that tries to call parseAllHeaders on your invalid SipMessage and can demonstrate the problem?
Thanks,
Scott
On Mon, Apr 21, 2014 at 11:16 AM, alok tiwari
<kumartiwarialok@xxxxxxxxxxx> wrote:
Hi,
Resip stack is getting hanged when API parseAllHeaders() is invoked for an incoming INVITE having following malformed proxy-authorization header.
Proxy-Authorization: Digest =AKAv0-MD5
The thread which is stucked have the following backtrace:
#0 0x08498ad7 in std::bitset<256u>::_Unchecked_test ()
#1 0x08499385 in std::bitset<256u>::test ()
#2 0x084993ad in resip::ParseBuffer::skipToOneOf ()
#3 0x0849802a in resip::Auth::parseAuthParameters ()
#4 0x084983dd in resip::Auth::parse ()
#5 0x084e2d20 in resip::LazyParser::doParse ()
#6 0x08498d13 in resip::LazyParser::checkParsed ()
#7 0x084d2cd0 in resip::ParserContainer<resip::Auth>::parseAll ()
#8 0x08528d2d in resip::SipMessage::parseAllHeaders ()
However, the same scenario is working fine on older resiprocate release 1.6. I analyzed and found some new changes in functions for auth handling.
Kindly help to find some solution for the same.
Regards,
Alok
_______________________________________________
resiprocate-users mailing list
resiprocate-users@xxxxxxxxxxxxxxx
List Archive: http://list.resiprocate.org/archive/resiprocate-users/