crashing with strings as simple as "/toto", but all in all the entire
function seems very wrong to me, see the next mail.
static inline char *vlc_UrlEncode( const char *psz_url )
{
char psz_enc[3 * strlen( psz_url ) + 1], *out = psz_enc;
static inline char *vlc_UrlEncode( const char *psz_url )
{
char psz_enc[3 * strlen( psz_url ) + 1], *out = psz_enc;
- const unsigned char *in;
- for( in = (const unsigned char *)psz_url; *in; in++ )
+ for( in = (const uint8_t *)psz_url; *in; in++ )
else
{
uint16_t cp;
*out++ = '%';
/* UTF-8 to UCS-2 conversion */
else
{
uint16_t cp;
*out++ = '%';
/* UTF-8 to UCS-2 conversion */
- if( ( c & 0x7f ) == 0 )
+ if( ( c & 0x80 ) == 0 )
+ {
- else
- if( ( c & 0xe0 ) == 0xc0 )
+ }
+ else if( ( c & 0xe0 ) == 0xc0 )
- cp = ((c & 0x1f) << 6) | (in[1] & 0x3f);
+ cp = (((uint16_t)c & 0x1f) << 6) | (in[1] & 0x3f);
- else
- if( ( c & 0xf0 ) == 0xe0 )
+ else if( ( c & 0xf0 ) == 0xe0 )
- cp = ((c & 0xf) << 12) | ((in[1] & 0x3f) << 6) | (in[2] & 0x3f);
+ cp = (((uint16_t)c & 0xf) << 12) | (((uint16_t)(in[1]) & 0x3f) << 6) | (in[2] & 0x3f);
/* cannot URL-encode code points outside the BMP */
/* cannot URL-encode code points outside the BMP */
+ /* better a wrong conversion than a crash */
+ cp = '?';
+ }