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