r3455 - trunk/libminisip/source/subsystem_signaling/sdp
erik at minisip.org
erik at minisip.org
Thu Nov 1 14:36:52 CET 2007
Author: erik
Date: 2007-11-01 14:36:52 +0100 (Thu, 01 Nov 2007)
New Revision: 3455
Modified:
trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderC.cxx
trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderM.cxx
trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderO.cxx
trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderT.cxx
Log:
* Made SDP parsing more roboust.
Modified: trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderC.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderC.cxx 2007-10-27 16:42:39 UTC (rev 3454)
+++ trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderC.cxx 2007-11-01 13:36:52 UTC (rev 3455)
@@ -39,29 +39,30 @@
using namespace std;
SdpHeaderC::SdpHeaderC(string buildFrom):SdpHeader(SDP_HEADER_TYPE_C, 4){
+ int len = buildFrom.length();
if (buildFrom.substr(0,2)!="c="){
std::cerr << "ERROR: Contact sdp header is not starting with <c=>"<< std::endl;
}
unsigned i=2;
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
netType="";
- while (buildFrom[i]!=' ')
+ while ( buildFrom[i]!=' ' && i<len )
netType+=buildFrom[i++];
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
addrType="";
- while (buildFrom[i]!=' ')
+ while ( buildFrom[i]!=' ' && i<len )
addrType+=buildFrom[i++];
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
addr="";
- while (buildFrom[i]!=' ' && !(i>=buildFrom.length()))
+ while (buildFrom[i]!=' ' && i<len)
addr+=buildFrom[i++];
}
Modified: trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderM.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderM.cxx 2007-10-27 16:42:39 UTC (rev 3454)
+++ trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderM.cxx 2007-11-01 13:36:52 UTC (rev 3455)
@@ -45,24 +45,25 @@
SdpHeaderM::SdpHeaderM(string buildFrom) : SdpHeader(SDP_HEADER_TYPE_M, 8){
+ int len = buildFrom.length();
if (buildFrom.substr(0,2)!="m="){
#ifdef DEBUG_OUTPUT
cerr << "ERROR: Origin sdp header is not starting with <m=>"<< endl;
#endif
}
unsigned i=2;
- while (buildFrom[i]==' ')
+ while (buildFrom[i]==' ' && i<len)
i++;
media="";
- while (buildFrom[i]!=' ')
+ while (buildFrom[i]!=' ' && i<len)
media+=buildFrom[i++];
- while (buildFrom[i]==' ')
+ while (buildFrom[i]==' ' && i<len)
i++;
string portstr="";
- while (buildFrom[i]!=' ')
+ while (buildFrom[i]!=' ' && i<len)
portstr+=buildFrom[i++];
int32_t np=0;
@@ -77,27 +78,27 @@
nPorts=1;
}
- while (buildFrom[i]==' ')
+ while (buildFrom[i]==' ' && i<len)
i++;
transport="";
- while (buildFrom[i]!=' ')
+ while (buildFrom[i]!=' ' && i<len)
transport+=buildFrom[i++];
bool done=false;
while (!done){
- while (buildFrom[i]==' ' && !(i>=buildFrom.length())){
+ while (buildFrom[i]==' ' && i<len ){
i++;
}
string f="";
- while (buildFrom[i]!=' ' && !(i>=buildFrom.length()))
+ while (buildFrom[i]!=' ' && i<len )
f+=buildFrom[i++];
if (f.length()>0){
formats.push_back(atoi(f.c_str()));
}
- if (i>=buildFrom.length())
+ if ( i>=len )
done=true;
}
}
Modified: trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderO.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderO.cxx 2007-10-27 16:42:39 UTC (rev 3454)
+++ trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderO.cxx 2007-11-01 13:36:52 UTC (rev 3455)
@@ -41,52 +41,53 @@
using namespace std;
SdpHeaderO::SdpHeaderO(string buildFrom):SdpHeader(SDP_HEADER_TYPE_O, 2){
+ int len = buildFrom.length();
if (buildFrom.substr(0,2)!="o="){
#ifdef DEBUG_OUTPUT
std::cerr << "ERROR: Origin sdp header is not starting with <o=>:"<<buildFrom<< std::endl;
#endif
}
unsigned i=2;
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
username="";
- while (buildFrom[i]!=' ')
+ while ( buildFrom[i]!=' ' && i<len )
username+=buildFrom[i++];
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
session_id="";
- while (buildFrom[i]!=' ')
+ while ( buildFrom[i]!=' ' && i<len )
session_id+=buildFrom[i++];
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
version="";
- while (buildFrom[i]!=' ')
+ while ( buildFrom[i]!=' ' && i<len )
version+=buildFrom[i++];
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
net_type="";
- while (buildFrom[i]!=' ')
+ while ( buildFrom[i]!=' ' && i<len )
net_type+=buildFrom[i++];
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
addr_type="";
- while (buildFrom[i]!=' ')
+ while ( buildFrom[i]!=' ' && i<len )
addr_type+=buildFrom[i++];
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
addr="";
- while (buildFrom[i]!=' ' && !(i>=buildFrom.length()-1))
+ while ( buildFrom[i]!=' ' && i<len )
addr+=buildFrom[i++];
}
Modified: trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderT.cxx
===================================================================
--- trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderT.cxx 2007-10-27 16:42:39 UTC (rev 3454)
+++ trunk/libminisip/source/subsystem_signaling/sdp/SdpHeaderT.cxx 2007-11-01 13:36:52 UTC (rev 3455)
@@ -42,6 +42,7 @@
using namespace std;
SdpHeaderT::SdpHeaderT(string buildFrom):SdpHeader(SDP_HEADER_TYPE_T, 5){
+ int len=buildFrom.length();
if (buildFrom.substr(0,2)!="t="){
#ifdef DEBUG_OUTPUT
std::cerr << "ERROR: Origin sdp header is not starting with <o=>"<< std::endl;
@@ -49,18 +50,18 @@
}
unsigned i=2;
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
string startstr="";
- while (buildFrom[i]!=' ')
+ while ( buildFrom[i]!=' ' && i<len )
startstr+=buildFrom[i++];
- while (buildFrom[i]==' ')
+ while ( buildFrom[i]==' ' && i<len )
i++;
string stopstr="";
- while (buildFrom[i]!=' ' && !(i>=buildFrom.length()-1))
+ while ( buildFrom[i]!=' ' && i<len )
stopstr+=buildFrom[i++];
start_time = atoi(startstr.c_str());
More information about the Minisip-devel
mailing list