* Fix issue with playlists containing a single quote.
* Ignore bad playlists containing binary data.
This commit is contained in:
parent
c441187d2a
commit
3934bf4448
14
playlist.c
14
playlist.c
@ -40,7 +40,7 @@ insert_playlist(const char * path, char * name)
|
|||||||
{
|
{
|
||||||
struct song_metadata plist;
|
struct song_metadata plist;
|
||||||
struct stat file;
|
struct stat file;
|
||||||
int items = 0, matches;
|
int items = 0, matches, ret;
|
||||||
char type[4];
|
char type[4];
|
||||||
|
|
||||||
strncpy(type, strrchr(name, '.')+1, 4);
|
strncpy(type, strrchr(name, '.')+1, 4);
|
||||||
@ -50,11 +50,16 @@ insert_playlist(const char * path, char * name)
|
|||||||
DPRINTF(E_WARN, L_SCANNER, "Bad playlist [%s]\n", path);
|
DPRINTF(E_WARN, L_SCANNER, "Bad playlist [%s]\n", path);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
while( next_plist_track(&plist, &file, NULL, type) == 0 )
|
while( (ret = next_plist_track(&plist, &file, NULL, type)) == 0 )
|
||||||
{
|
{
|
||||||
items++;
|
items++;
|
||||||
freetags(&plist);
|
freetags(&plist);
|
||||||
}
|
}
|
||||||
|
if( ret == 2 ) // Bad playlist -- contains binary characters
|
||||||
|
{
|
||||||
|
DPRINTF(E_WARN, L_SCANNER, "Bad playlist [%s]\n", path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
strip_ext(name);
|
strip_ext(name);
|
||||||
|
|
||||||
DPRINTF(E_DEBUG, L_SCANNER, "Playlist %s contains %d items\n", name, items);
|
DPRINTF(E_DEBUG, L_SCANNER, "Playlist %s contains %d items\n", name, items);
|
||||||
@ -113,9 +118,8 @@ fill_playlists()
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
DPRINTF(E_DEBUG, L_SCANNER, "Scanning playlist \"%s\" [%s]\n", plname, plpath);
|
DPRINTF(E_DEBUG, L_SCANNER, "Scanning playlist \"%s\" [%s]\n", plname, plpath);
|
||||||
sprintf(sql_buf, "SELECT ID from OBJECTS where PARENT_ID = '"MUSIC_PLIST_ID"'"
|
if( sql_get_int_field(db, "SELECT ID from OBJECTS where PARENT_ID = '"MUSIC_PLIST_ID"'"
|
||||||
" and NAME = '%s'", plname);
|
" and NAME = '%q'", plname) <= 0 )
|
||||||
if( sql_get_int_field(db, sql_buf) <= 0 )
|
|
||||||
{
|
{
|
||||||
detailID = GetFolderMetadata(plname, NULL, NULL, NULL, NULL);
|
detailID = GetFolderMetadata(plname, NULL, NULL, NULL, NULL);
|
||||||
sql_exec(db, "INSERT into OBJECTS"
|
sql_exec(db, "INSERT into OBJECTS"
|
||||||
|
@ -50,14 +50,14 @@ start_plist(const char *path, struct song_metadata *psong, struct stat *stat, ch
|
|||||||
_utf8bom = 0;
|
_utf8bom = 0;
|
||||||
_trackno = 0;
|
_trackno = 0;
|
||||||
|
|
||||||
if(strcmp(type, "m3u") == 0)
|
if(strcasecmp(type, "m3u") == 0)
|
||||||
_next_track = _m3u_next_track;
|
_next_track = _m3u_next_track;
|
||||||
else if(strcmp(type, "pls") == 0)
|
else if(strcasecmp(type, "pls") == 0)
|
||||||
_next_track = _pls_next_track;
|
_next_track = _pls_next_track;
|
||||||
|
|
||||||
if(!_next_track)
|
if(!_next_track)
|
||||||
{
|
{
|
||||||
DPRINTF(E_ERROR, L_SCANNER, "Unsupported playlist type <%s>\n", type);
|
DPRINTF(E_ERROR, L_SCANNER, "Unsupported playlist type <%s> (%s)\n", type, path);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,6 +118,14 @@ _m3u_next_track(struct song_metadata *psong, struct stat *stat, char *lang, char
|
|||||||
while(p)
|
while(p)
|
||||||
{
|
{
|
||||||
while(isspace(*p)) p++;
|
while(isspace(*p)) p++;
|
||||||
|
|
||||||
|
if(!isprint(*p))
|
||||||
|
{
|
||||||
|
DPRINTF(E_ERROR, L_SCANNER, "Playlist looks bad (unprintable characters)\n");
|
||||||
|
fclose(fp);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
if(*p && *p != '#')
|
if(*p && *p != '#')
|
||||||
{
|
{
|
||||||
// check dos format
|
// check dos format
|
||||||
@ -153,6 +161,14 @@ _pls_next_track(struct song_metadata *psong, struct stat *stat, char *lang, char
|
|||||||
while(p)
|
while(p)
|
||||||
{
|
{
|
||||||
while(isspace(*p)) p++;
|
while(isspace(*p)) p++;
|
||||||
|
|
||||||
|
if(!isprint(*p))
|
||||||
|
{
|
||||||
|
DPRINTF(E_ERROR, L_SCANNER, "Playlist looks bad (unprintable characters)\n");
|
||||||
|
fclose(fp);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
if(*p && *p != '#')
|
if(*p && *p != '#')
|
||||||
{
|
{
|
||||||
// verify that it's a valid pls playlist
|
// verify that it's a valid pls playlist
|
||||||
|
Loading…
x
Reference in New Issue
Block a user