[MPlayer-dev-eng] [PATCH 1/7] Unescape login/password before base64 encode
Reimar Döffinger
Reimar.Doeffinger at gmx.de
Thu Nov 11 20:36:07 CET 2010
On Thu, Nov 11, 2010 at 01:41:39PM +0100, Clément Bœsch wrote:
> > And what about unescaping in url_new when username/password is assigned?
>
> Yes, this seems actually to be a better solution.
Why not like patch below?
> > > > I don't think escaping is supposed to be applied to anything else.
> > >
> > > We could also have users who try to make special character by urlencoding
> > > themselves the password (special char not easy to escape with the shell,
> > > or simply break url parsing in MPlayer because of ':' or '@' in it).
> > > MPlayer urlencode won't change the string, but the http auth code will be
> > > able to decode it.
> >
> > Well, thinking more about it I have the suspicion that your patch will
> > actually break e.g. %20 as password, it well end up using a single space
> > as password (unless you pre-escape it of course)...
> > Doing it in url_new would at least allow the other method of specifying
> > it...
> > I'd actually be quite curious what webbrowser do in such a case.
>
> MPlayer is closer to curl than a browser in term of use, so I just
> compared with it, and here is the behaviour:
>
> curl 'http://usr:%20@localhost:8000' => 'dXNyOiA=' => 'usr: '
> curl 'http://locahost:8000' -u 'usr:%20' => 'dXNyOiUyMA==' => 'usr:%20'
>
> So indeed, unescaping in url_new seems to be the right thing to do. Patch
> attached.
Very nice test, that gives me a lot more confidence that we are doing something
sane.
Index: url.c
===================================================================
--- url.c (revision 32620)
+++ url.c (working copy)
@@ -153,7 +153,9 @@
}
strncpy( Curl->password, ptr3+1, len2);
Curl->password[len2]='\0';
+ url_unescape_string(Curl->password, Curl->password);
}
+ url_unescape_string(Curl->username, Curl->username);
ptr1 = ptr2+1;
pos1 = ptr1-escfilename;
}
@@ -252,7 +254,8 @@
/* Replace escape sequences in an URL (or a part of an URL) */
-/* works like strcpy(), but without return argument */
+/* works like strcpy(), but without return argument,
+ except that outbuf == inbuf is allowed */
void
url_unescape_string(char *outbuf, const char *inbuf)
{
More information about the MPlayer-dev-eng
mailing list