Skip to content

Commit

Permalink
Add safeguard to block malicious use of removeFolder/removeDataset
Browse files Browse the repository at this point in the history
  • Loading branch information
nirvn committed Jan 23, 2025
1 parent 02c4244 commit 79f03a6
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 20 deletions.
62 changes: 44 additions & 18 deletions src/core/platforms/android/androidplatformutilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -287,16 +287,29 @@ void AndroidPlatformUtilities::exportDatasetTo( const QString &path ) const

void AndroidPlatformUtilities::removeDataset( const QString &path ) const
{
if ( mActivity.isValid() )
bool allowed = false;
const QStringList allowedDirectories = QStringList() << applicationDirectory() << additionalApplicationDirectories();
for ( const QString &directory : allowedDirectories )
{
runOnAndroidMainThread( [path] {
auto activity = qtAndroidContext();
if ( activity.isValid() )
{
QJniObject pathJni = QJniObject::fromString( path );
activity.callMethod<void>( "removeDataset", "(Ljava/lang/String;)V", pathJni.object<jstring>() );
}
} );
if ( path.startsWith( directory ) )
{
allowed = true;
break;
}
}
if ( allowed )
{
if ( mActivity.isValid() )
{
runOnAndroidMainThread( [path] {
auto activity = qtAndroidContext();
if ( activity.isValid() )
{
QJniObject pathJni = QJniObject::fromString( path );
activity.callMethod<void>( "removeDataset", "(Ljava/lang/String;)V", pathJni.object<jstring>() );
}
} );
}
}
}

Expand Down Expand Up @@ -332,16 +345,29 @@ void AndroidPlatformUtilities::sendCompressedFolderTo( const QString &path ) con

void AndroidPlatformUtilities::removeFolder( const QString &path ) const
{
if ( mActivity.isValid() )
bool allowed = false;
const QStringList allowedDirectories = QStringList() << applicationDirectory() << additionalApplicationDirectories();
for ( const QString &directory : allowedDirectories )
{
runOnAndroidMainThread( [path] {
auto activity = qtAndroidContext();
if ( activity.isValid() )
{
QJniObject pathJni = QJniObject::fromString( path );
activity.callMethod<void>( "removeProjectFolder", "(Ljava/lang/String;)V", pathJni.object<jstring>() );
}
} );
if ( path.startsWith( directory ) )
{
allowed = true;
break;
}
}
if ( allowed )
{
if ( mActivity.isValid() )
{
runOnAndroidMainThread( [path] {
auto activity = qtAndroidContext();
if ( activity.isValid() )
{
QJniObject pathJni = QJniObject::fromString( path );
activity.callMethod<void>( "removeProjectFolder", "(Ljava/lang/String;)V", pathJni.object<jstring>() );
}
} );
}
}
}

Expand Down
30 changes: 28 additions & 2 deletions src/core/platforms/platformutilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -274,12 +274,38 @@ void PlatformUtilities::sendCompressedFolderTo( const QString &path ) const

void PlatformUtilities::removeDataset( const QString &path ) const
{
QFile::moveToTrash( path );
bool allowed = false;
const QStringList allowedDirectories = QStringList() << applicationDirectory() << additionalApplicationDirectories();
for ( const QString &directory : allowedDirectories )
{
if ( path.startsWith( directory ) )
{
allowed = true;
break;
}
}
if ( allowed )
{
QFile::moveToTrash( path );
}
}

void PlatformUtilities::removeFolder( const QString &path ) const
{
QFile::moveToTrash( path );
bool allowed = false;
const QStringList allowedDirectories = QStringList() << applicationDirectory() << additionalApplicationDirectories();
for ( const QString &directory : allowedDirectories )
{
if ( path.startsWith( directory ) )
{
allowed = true;
break;
}
}
if ( allowed )
{
QFile::moveToTrash( path );
}
}

ResourceSource *PlatformUtilities::getCameraPicture( const QString &, const QString &, const QString &, QObject * )
Expand Down

0 comments on commit 79f03a6

Please sign in to comment.