Commit f36b9bc6 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

HTTP interface art: use make_path and fix a few memory errors

parent a85ee2ea
...@@ -798,53 +798,56 @@ int ArtCallback( httpd_handler_sys_t *p_args, ...@@ -798,53 +798,56 @@ int ArtCallback( httpd_handler_sys_t *p_args,
psz_art = input_item_GetArtURL( p_item ); psz_art = input_item_GetArtURL( p_item );
} }
if( psz_art && !strncmp( psz_art, "file://", strlen( "file://" ) ) && if( psz_art )
decode_URI( psz_art + 7 ) )
{ {
FILE *f; char *psz = make_path( psz_art );
char *psz_ext; free( psz_art );
char *psz_header; psz_art = psz;
char *p_data = NULL; }
int i_header_size, i_data;
if( ( f = vlc_fopen( psz_art + strlen( "file://" ), "r" ) ) == NULL ) if( psz_art == NULL )
{ {
msg_Dbg( p_intf, "Couldn't open album art file %s", msg_Dbg( p_intf, "No album art found" );
psz_art + strlen( "file://" ) ); Callback404( &p_args->file, (char**)pp_data, pi_data );
return VLC_SUCCESS;
}
FILE *f = vlc_fopen( psz_art, "r" );
if( f == NULL )
{
msg_Dbg( p_intf, "Couldn't open album art file %s", psz_art );
Callback404( &p_args->file, (char**)pp_data, pi_data ); Callback404( &p_args->file, (char**)pp_data, pi_data );
free( psz_art ); free( psz_art );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
free( psz_art );
char *p_data = NULL;
int i_data;
FileLoad( f, &p_data, &i_data ); FileLoad( f, &p_data, &i_data );
fclose( f ); fclose( f );
psz_ext = strrchr( psz_art, '.' ); char *psz_ext = strrchr( psz_art, '.' );
if( psz_ext ) psz_ext++; if( psz_ext ) psz_ext++;
#define HEADER "Content-Type: image/%s\n" \ #define HEADER "Content-Type: image/%s\n" \
"Content-Length: %d\n" \ "Content-Length: %d\n" \
"\n" "\n"
i_header_size = asprintf( &psz_header, HEADER, psz_ext, i_data ); char *psz_header;
int i_header_size = asprintf( &psz_header, HEADER, psz_ext, i_data );
#undef HEADER #undef HEADER
if( likely(i_header_size != -1) )
assert( i_header_size != -1 ); {
*pp_data = malloc( i_header_size + i_data );
if( likely(*pp_data != NULL) )
{
*pi_data = i_header_size + i_data; *pi_data = i_header_size + i_data;
*pp_data = (uint8_t*)malloc( *pi_data );
memcpy( *pp_data, psz_header, i_header_size ); memcpy( *pp_data, psz_header, i_header_size );
memcpy( *pp_data+i_header_size, p_data, i_data ); memcpy( *pp_data+i_header_size, p_data, i_data );
free( psz_header );
free( p_data );
} }
else free( psz_header );
{
msg_Dbg( p_intf, "No album art found" );
Callback404( &p_args->file, (char**)pp_data, pi_data );
} }
free( p_data );
free( psz_art );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment