Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Steve Lhomme
VLC
Commits
64874cf7
Commit
64874cf7
authored
Aug 30, 2006
by
Rémi Denis-Courmont
Browse files
Fix base64 encoding and add regression test
parent
ac52d273
Changes
2
Hide whitespace changes
Inline
Side-by-side
include/vlc_url.h
View file @
64874cf7
...
...
@@ -217,7 +217,7 @@ static inline int vlc_UrlIsNotEncoded( const char *psz_url )
*****************************************************************************
*
*****************************************************************************/
static
inline
char
*
vlc_b64_encode
(
char
*
src
)
static
inline
char
*
vlc_b64_encode
(
const
char
*
src
)
{
static
const
char
b64
[]
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
;
...
...
@@ -232,38 +232,29 @@ static inline char *vlc_b64_encode( char *src )
while
(
len
>
0
)
{
/* pops (up to) 3 bytes of input */
uint32_t
v
=
*
src
++
<<
24
;
/* pops (up to) 3 bytes of input, push 4 bytes */
uint32_t
v
=
*
src
++
<<
24
;
// 1/3
*
dst
++
=
b64
[
v
>>
26
];
// 1/4
v
=
v
<<
6
;
if
(
len
>=
2
)
{
v
|=
*
src
++
<<
16
;
if
(
len
>=
3
)
v
|=
*
src
++
<<
8
;
}
v
|=
*
src
++
<<
16
;
// 2/3
*
dst
++
=
b64
[
v
>>
26
];
// 2/4
v
=
v
<<
6
;
/* pushes (up to) 4 bytes of output */
while
(
v
)
{
*
dst
++
=
b64
[
v
>>
26
];
v
=
v
<<
6
;
}
if
(
len
>=
3
)
v
|=
*
src
++
<<
8
;
// 3/3
*
dst
++
=
(
len
>=
2
)
?
b64
[
v
>>
26
]
:
'='
;
// 3/4
v
=
v
<<
6
;
switch
(
len
)
*
dst
++
=
(
len
>=
3
)
?
b64
[
v
>>
26
]
:
'='
;
// 4/4
len
--
;
if
(
len
>
0
)
{
case
1
:
*
dst
++
=
'='
;
*
dst
++
=
'='
;
len
--
;
if
(
len
>
0
)
len
--
;
break
;
case
2
:
*
dst
++
=
'='
;
len
-=
2
;
break
;
default:
len
-=
3
;
}
}
...
...
src/test/url.c
View file @
64874cf7
...
...
@@ -25,21 +25,36 @@
#include
<stdio.h>
#include
<stdlib.h>
void
test_decode
(
const
char
*
in
,
const
char
*
out
)
typedef
char
*
(
*
conv_t
)
(
const
char
*
);
static
void
test
(
conv_t
f
,
const
char
*
in
,
const
char
*
out
)
{
char
*
res
;
printf
(
"
\"
%s
\"
->
\"
%s
\"
?
\n
"
,
in
,
out
);
res
=
decode_URI_duplicate
(
in
);
res
=
f
(
in
);
if
(
res
==
NULL
)
exit
(
1
);
if
(
strcmp
(
res
,
out
))
{
printf
(
" ERROR: got
\"
%s
\"\n
"
,
res
);
exit
(
2
);
}
free
(
res
);
}
static
inline
void
test_decode
(
const
char
*
in
,
const
char
*
out
)
{
test
(
decode_URI_duplicate
,
in
,
out
);
}
static
inline
void
test_b64
(
const
char
*
in
,
const
char
*
out
)
{
test
(
vlc_b64_encode
,
in
,
out
);
}
int
main
(
void
)
{
(
void
)
setvbuf
(
stdout
,
NULL
,
_IONBF
,
0
);
...
...
@@ -64,5 +79,12 @@ int main (void)
test_decode
(
"T%E9l%E9vision"
,
"T?l?vision"
);
test_decode
(
"%C1%94%C3%a9l%c3%A9vision"
,
"??élévision"
);
/* overlong */
/* Base 64 tests */
test_b64
(
""
,
""
);
test_b64
(
"d"
,
"ZA=="
);
test_b64
(
"ab"
,
"YQG="
);
test_b64
(
"abc"
,
"YQGI"
);
test_b64
(
"abcd"
,
"YQGIZA=="
);
return
0
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment