1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-20 07:49:42 +01:00

Add escape helper method to JSResolver

This commit is contained in:
Dominik Schmidt 2014-11-17 15:56:51 +01:00
parent f8ce2c9108
commit de0fcab5f9
2 changed files with 25 additions and 14 deletions
src/libtomahawk/resolvers

@ -325,7 +325,7 @@ JSResolver::artists( const Tomahawk::collection_ptr& collection )
}
QString eval = QString( "artists( '%1' )" )
.arg( collection->name().replace( "\\", "\\\\" ).replace( "'", "\\'" ) );
.arg( escape( collection->name() ) );
QVariantMap m = callOnResolver( eval ).toMap();
if ( m.isEmpty() )
@ -361,8 +361,8 @@ JSResolver::albums( const Tomahawk::collection_ptr& collection, const Tomahawk::
}
QString eval = QString( "albums( '%1', '%2' )" )
.arg( collection->name().replace( "\\", "\\\\" ).replace( "'", "\\'" ) )
.arg( artist->name().replace( "\\", "\\\\" ).replace( "'", "\\'" ) );
.arg( escape( collection->name() ) )
.arg( escape( artist->name() ) );
QVariantMap m = callOnResolver( eval ).toMap();
if ( m.isEmpty() )
@ -398,9 +398,9 @@ JSResolver::tracks( const Tomahawk::collection_ptr& collection, const Tomahawk::
}
QString eval = QString( "tracks( '%1', '%2', '%3' )" )
.arg( collection->name().replace( "\\", "\\\\" ).replace( "'", "\\'" ) )
.arg( album->artist()->name().replace( "\\", "\\\\" ).replace( "'", "\\'" ) )
.arg( album->name().replace( "\\", "\\\\" ).replace( "'", "\\'" ) );
.arg( escape( collection->name() ) )
.arg( escape( album->artist()->name() ) )
.arg( escape( album->name() ) );
QVariantMap m = callOnResolver( eval ).toMap();
if ( m.isEmpty() )
@ -431,7 +431,7 @@ JSResolver::canParseUrl( const QString& url, UrlType type )
if ( d->capabilities.testFlag( UrlLookup ) )
{
QString eval = QString( "canParseUrl( '%1', %2 )" )
.arg( QString( url ).replace( "\\", "\\\\" ).replace( "'", "\\'" ) )
.arg( escape( QString( url ) ) )
.arg( (int) type );
return callOnResolver( eval ).toBool();
}
@ -462,7 +462,7 @@ JSResolver::lookupUrl( const QString& url )
}
QString eval = QString( "lookupUrl( '%1' )" )
.arg( QString( url ).replace( "\\", "\\\\" ).replace( "'", "\\'" ) );
.arg( escape( QString( url ) ) );
QVariantMap m = callOnResolver( eval ).toMap();
if ( m.isEmpty() )
@ -534,16 +534,16 @@ JSResolver::resolve( const Tomahawk::query_ptr& query )
if ( !query->isFullTextQuery() )
{
eval = QString( "resolve( '%1', '%2', '%3', '%4' )" )
.arg( query->id().replace( "\\", "\\\\" ).replace( "'", "\\'" ) )
.arg( query->queryTrack()->artist().replace( "\\", "\\\\" ).replace( "'", "\\'" ) )
.arg( query->queryTrack()->album().replace( "\\", "\\\\" ).replace( "'", "\\'" ) )
.arg( query->queryTrack()->track().replace( "\\", "\\\\" ).replace( "'", "\\'" ) );
.arg( escape( query->id() ) )
.arg( escape( query->queryTrack()->artist() ) )
.arg( escape( query->queryTrack()->album() ) )
.arg( escape( query->queryTrack()->track() ) );
}
else
{
eval = QString( "search( '%1', '%2' )" )
.arg( query->id().replace( "\\", "\\\\" ).replace( "'", "\\'" ) )
.arg( query->fullTextQuery().replace( "\\", "\\\\" ).replace( "'", "\\'" ) );
.arg( escape( query->id() ) )
.arg( escape( query->fullTextQuery() ) );
}
QVariantMap m = callOnResolver( eval ).toMap();
@ -1018,3 +1018,9 @@ JSResolver::callOnResolver( const QString& scriptSource )
"}"
).arg( propertyName ).arg( scriptSource ) );
}
QString JSResolver::escape( const QString& source )
{
return source.replace( "\\", "\\\\" ).replace( "'", "\\'" );
}

@ -111,6 +111,11 @@ private:
*/
QVariant evaluateJavaScriptInternal( const QString& scriptSource );
/**
* Escape \ and ' in strings so they are safe to use in JavaScript
*/
static QString escape( const QString& source );
// encapsulate javascript calls
QVariantMap resolverSettings();
QVariantMap resolverUserConfig();