RE: [Nokia-private-dev] CR: TKON-7FF9XE Fix for corruption of escaped URLs in sdp file

<[email protected]>
Newsgroups gmane.comp.multimedia.helix.devel
Message-ID <[email protected]>
Hi,
I have made the HXBOOL changes and checked in on Cays221 and Cays210. 
Please let me know if someone is still reviewing. If there are no more
comments, I will also go ahead and check it into head.

Updated diff:
Index: hxflsrc.cpp
===================================================================
RCS file: /cvsroot/client/core/hxflsrc.cpp,v
retrieving revision 1.96.2.7.2.2
diff -u -w -r1.96.2.7.2.2 hxflsrc.cpp
--- hxflsrc.cpp 6 May 2008 22:55:51 -0000       1.96.2.7.2.2
+++ hxflsrc.cpp 26 Aug 2008 20:04:40 -0000
@@ -3575,7 +3575,11 @@
     memset(pszSDPBuffer, 0, ulSDPBufferSize);
     strncpy(pszSDPBuffer, (const char*)pFile->GetBuffer(),
pFile->GetSize());

-    escapedSDP = HXEscapeUtil::EscapeGeneric(pszSDPBuffer);
+    // Allowing double-escape of characters in sdp file so it can be
restored
+    // to its original form when it's unescaped in
HXNetSource::FinishSetup().
+    // If this is not done, any URL in the sdp file that contains
escaped
+    //  characters will be corrupted
+    escapedSDP = HXEscapeUtil::EscapeGeneric(pszSDPBuffer, TRUE);

     url = HELIX_SDP_SCHEME;
     url += ":";


Index: hxescapeutil.cpp
===================================================================
RCS file: /cvsroot/common/util/hxescapeutil.cpp,v
retrieving revision 1.2.42.1
diff -u -w -r1.2.42.1 hxescapeutil.cpp
--- hxescapeutil.cpp    2 May 2006 19:47:31 -0000       1.2.42.1
+++ hxescapeutil.cpp    26 Aug 2008 20:08:36 -0000
@@ -171,7 +171,7 @@
     return newStr.Finish();
 }

-static CHXString Escape(const CHXString& unescapedStr, const char*
pExtra = 0)
+static CHXString Escape(const CHXString& unescapedStr, const char*
pExtra = 0, const HXBOOL doubleEscape = FALSE)
 {
     int len = unescapedStr.GetLength();
     const char* pCur = unescapedStr;
@@ -181,7 +181,7 @@
     while (len)
     {
        if (IsSpecialChar(*pCur, pExtra) &&
-           !IsEscaped(pCur,len))
+        (!IsEscaped(pCur,len) || doubleEscape))
        {
            // Escape this character
            *newPath = '%';
@@ -320,9 +320,9 @@
 }

 // escape everything but unreserved characters
-CHXString HXEscapeUtil::EscapeGeneric(const CHXString& unescapedQuery)
+CHXString HXEscapeUtil::EscapeGeneric(const CHXString& unescapedQuery,
const HXBOOL doubleEscape)
 {
-    return Escape(unescapedQuery);
+    return Escape(unescapedQuery, NULL, doubleEscape);
 }

 // escape symbol by doubling, e.g., '%' -> '%%'


Index: hxescapeutil.h
===================================================================
RCS file: /cvsroot/common/util/pub/hxescapeutil.h,v
retrieving revision 1.2
diff -u -w -r1.2 hxescapeutil.h
--- hxescapeutil.h      15 Dec 2004 21:26:28 -0000      1.2
+++ hxescapeutil.h      26 Aug 2008 20:10:15 -0000
@@ -27,7 +27,7 @@
 static CHXString UnEscape(const CHXString& escapedStr);

 // encode (used when assembling url components into a full URL)
-static CHXString EscapeGeneric(const CHXString& unescapedStr);
+static CHXString EscapeGeneric(const CHXString& unescapedStr, const
HXBOOL doubleEscape = FALSE);
 static CHXString EscapePath(const CHXString& unescapedPath, bool
bForcePlusEscape = false);
 static CHXString EscapeQuery(const CHXString& unescapedQuery);


Regards,
Gaby

-----Original Message-----
From: ext Gregory Wright [mailto:[email protected]] 
Sent: Sunday, August 24, 2008 3:15 PM
To: Valverde Gabriela (EXT-Infovision-MSW/Dallas)
Cc: [email protected]; [email protected];
[email protected]
Subject: Re: [Nokia-private-dev] CR: TKON-7FF9XE Fix for corruption of
escaped URLs in sdp file 


I would like others, who have done more SDP/escape stuff to chime in,
but if this is time critical, it is OK for CayS branches, but please
wait on HEAD until others can verify allowing double escaping won't have
any ill effects on SDP playback.

Some bool-->HXBOOL changes needed below for both branches.

--greg.



On Aug 22, 2008, at 1:09 PM, [email protected] wrote:

> "Nokia submits this code under the terms of a commercial contribution 
> agreement with RealNetworks, and I am authorized to contribute this 
> code under said agreement."
>
>
> Modified by:  [email protected]
>
> Reviewed by:
> TSW Id: TKON-7FF9XE
> Synergy change Id: ou1cimx1#18877
> Date: 08/21/2008
>
> Project: SymbianMmf_rel
>
> Synopsis: Fix for corruption of escaped URLs in sdp file
>
> Overview:
> Control URLs with escaped characters are being corrupted in the case  
> of streaming from an sdp file.
>
> The sdp file contains the following URL:
>
rtsp://195.92.254.27:554/owtv007?fg=2&ud=msisdn%3D447973261756%2Csubscri
ptionId%3D77657%2CmmServiceId%3D64436&dt=20080723T183555.000Z&ds=9a4cde8
ea60e54d5f9adc7cb23fcf7bccaa1899a
>
> But what helix sends out in the SETUP request is this:
>
rtsp://195.92.254.27:554/owtv007?fg=2&ud=msisdn=447973261756,subscriptio
nId=77657,mmServiceId=64436&dt=20080723T183555.000Z&ds=9a4cde8ea60e54d5f
9adc7cb23fcf7bccaa1899a
>
> The difference between the two is that reserved characters are un- 
> escaped by helix in the value of this "key=value" pair:
>
> In SDP file:
> ud=msisdn%3D447973261756%2CsubscriptionId%3D77657%2CmmServiceId 
> %3D64436
> After Helix un-escapes:
> ud=msisdn=447973261756,subscriptionId=77657,mmServiceId=64436
>
> This happens because:
> 1. We first escape the entire SDP file in HXFileSource::GetFileDone()
> 2. Then we un-escape it in HXNetSource::FinishSetup() -> This is  
> when the "=" and "," characters
> in question are un-escaped.
> 3. Then we escape the URL again in  
> RTSPClientProtocol::InitExtInitSDP() by calling  
> HXEscapeUtil::EnsureEscapedURL(), but this doesn't return the URL to  
> its original form. The reason why the "=" and "," characters are not  
> escaped here is because the entire query (the part after ?) is  
> treated as one string where reserved characters (';', '/', '?', ':',  
> '@', '&', '=', '+', '$', ',', '\0') do not need to be escaped. Given  
> a query string with no escaped characters, helix would not be able  
> to reconstruct the original percent-encoded query in all cases.
>
> Fix:
> Make sure that characters are double-escaped when the sdp file is  
> initially escaped.
>
> 1. After escaping the sdp file, the URL would become:
>
rtsp://195.92.254.27:554/owtv007?fg=2&ud=msisdn%253D447973261756%252Csub
> scriptionId%253D77657%252CmmServiceId 
> %253D64436&dt=20080723T183555.000Z&
> ds=9a4cde8ea60e54d5f9adc7cb23fcf7bccaa1899a
>
> 2. After unescaping the sdp file, the URL would go back to its  
> original form:
>
rtsp://195.92.254.27:554/owtv007?fg=2&ud=msisdn%3D447973261756%2Csubscri
> ptionId%3D77657%2CmmServiceId 
> %3D64436&dt=20080723T183555.000Z&ds=9a4cde8
> ea60e54d5f9adc7cb23fcf7bccaa1899a
>
> 3. Finally, after escaping the URL (with the idempotent version of  
> the escape function, as we usually do, not escaping already escaped  
> characters), we still get back the original URL:
>
>
rtsp://195.92.254.27:554/owtv007?fg=2&ud=msisdn%3D447973261756%2Csubscri
> ptionId%3D77657%2CmmServiceId 
> %3D64436&dt=20080723T183555.000Z&ds=9a4cde8
> ea60e54d5f9adc7cb23fcf7bccaa1899a
>
>
> Files modified & changes:
> /client/core/hxflsrc.cpp
> /common/util/hxescapeutil.cpp
> /common/util/pub/hxescapeutil.h
>
>
> Image Size and Heap Use impact: None
>
> Module Release testing (STIF) : Passed (Streaming)
>
> Test case(s) Added  : No.
>
> Memory leak check performed : Passed, No leaks found
>
> Platforms and Profiles Build Verified: helix-client-s60-32-mmf-mdf-arm
>
> Platforms and Profiles Functionality verified: armv5
>
> Branch: Head, 210CayS, 221Cays
>
>
> Index: hxflsrc.cpp
> ===================================================================
> RCS file: /cvsroot/client/core/hxflsrc.cpp,v
> retrieving revision 1.96.2.7.2.2
> diff -u -w -r1.96.2.7.2.2 hxflsrc.cpp
> --- hxflsrc.cpp 6 May 2008 22:55:51 -0000       1.96.2.7.2.2
> +++ hxflsrc.cpp 21 Aug 2008 20:00:05 -0000
> @@ -3575,7 +3575,11 @@
>      memset(pszSDPBuffer, 0, ulSDPBufferSize);
>      strncpy(pszSDPBuffer, (const char*)pFile->GetBuffer(), pFile- 
> >GetSize());
>
> -    escapedSDP = HXEscapeUtil::EscapeGeneric(pszSDPBuffer);
> +    // Allowing double-escape of characters in sdp file so it can  
> be restored
> +    // to its original form when it's unescaped in  
> HXNetSource::FinishSetup().
> +    // If this is not done, any URL in the sdp file that contains  
> escaped
> +    //  characters will be corrupted
> +    escapedSDP = HXEscapeUtil::EscapeGeneric(pszSDPBuffer, true);
>

>      url = HELIX_SDP_SCHEME;
>      url += ":";
>
>
> Index: hxescapeutil.cpp
> ===================================================================
> RCS file: /cvsroot/common/util/hxescapeutil.cpp,v
> retrieving revision 1.2.42.1
> diff -u -w -r1.2.42.1 hxescapeutil.cpp
> --- hxescapeutil.cpp    2 May 2006 19:47:31 -0000       1.2.42.1
> +++ hxescapeutil.cpp    21 Aug 2008 20:00:54 -0000
> @@ -171,7 +171,7 @@
>      return newStr.Finish();
>  }
>
> -static CHXString Escape(const CHXString& unescapedStr, const char*  
> pExtra = 0)
> +static CHXString Escape(const CHXString& unescapedStr, const char*  
> pExtra = 0, const bool doubleEscape = false)
>


We should not be using 'bool' but 'HXBOOL' in common Helix code....

>
>  {
>      int len = unescapedStr.GetLength();
>      const char* pCur = unescapedStr;
> @@ -181,7 +181,7 @@
>      while (len)
>      {
>         if (IsSpecialChar(*pCur, pExtra) &&
> -           !IsEscaped(pCur,len))
> +        (!IsEscaped(pCur,len) || doubleEscape))
>         {
>             // Escape this character
>             *newPath = '%';
> @@ -320,9 +320,9 @@
>  }
>
>  // escape everything but unreserved characters
> -CHXString HXEscapeUtil::EscapeGeneric(const CHXString&  
> unescapedQuery)
> +CHXString HXEscapeUtil::EscapeGeneric(const CHXString&  
> unescapedQuery, const bool doubleEscape)
>

bool -> HXBOOL....

>
>  {
> -    return Escape(unescapedQuery);
> +    return Escape(unescapedQuery, NULL, doubleEscape);
>  }
>
>  // escape symbol by doubling, e.g., '%' -> '%%'
>
>
> Index: hxescapeutil.h
> ===================================================================
> RCS file: /cvsroot/common/util/pub/hxescapeutil.h,v
> retrieving revision 1.2
> diff -u -w -r1.2 hxescapeutil.h
> --- hxescapeutil.h      15 Dec 2004 21:26:28 -0000      1.2
> +++ hxescapeutil.h      21 Aug 2008 20:02:12 -0000
> @@ -27,7 +27,7 @@
>  static CHXString UnEscape(const CHXString& escapedStr);
>
>  // encode (used when assembling url components into a full URL)
> -static CHXString EscapeGeneric(const CHXString& unescapedStr);
> +static CHXString EscapeGeneric(const CHXString& unescapedStr, const  
> bool doubleEscape = false);
>

bool --> HXBOOL.....

>
>  static CHXString EscapePath(const CHXString& unescapedPath, bool  
> bForcePlusEscape = false);
>  static CHXString EscapeQuery(const CHXString& unescapedQuery);
>
>
> Regards,
> Gaby
>
>
>
> _______________________________________________
> Nokia-private-dev mailing list
> [email protected]
> http://lists.helixcommunity.org/mailman/listinfo/nokia-private-dev


_______________________________________________
Helix-client-dev mailing list
[email protected]
http://lists.helixcommunity.org/mailman/listinfo/helix-client-dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.