Skip to content

Commit

Permalink
Merge branch 'jb46420' into 'master'
Browse files Browse the repository at this point in the history
[nemo-storage] Do not accept invalid block devices. Fixes JB#46420

See merge request mer-core/nemo-qml-plugin-systemsettings!110
  • Loading branch information
rainemak committed Jul 12, 2019
2 parents d5b60ad + a819cb1 commit 9b5b458
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 7 deletions.
6 changes: 5 additions & 1 deletion src/udisks2block.cpp
Expand Up @@ -267,7 +267,11 @@ bool UDisks2::Block::isExternal() const

bool UDisks2::Block::isValid() const
{
return m_interfacePropertyMap.contains(UDISKS2_BLOCK_INTERFACE);
bool hasBlock = m_interfacePropertyMap.contains(UDISKS2_BLOCK_INTERFACE);
if (hasBlock && device().startsWith(QStringLiteral("/dev/dm"))) {
return hasCryptoBackingDevice();
}
return hasBlock;
}

QString UDisks2::Block::idType() const
Expand Down
22 changes: 16 additions & 6 deletions src/udisks2blockdevices.cpp
Expand Up @@ -66,8 +66,11 @@ bool BlockDevices::contains(const QString &dbusObjectPath) const

void BlockDevices::remove(const QString &dbusObjectPath)
{
Block *block = m_blockDevices.take(dbusObjectPath);
block->deleteLater();
if (contains(dbusObjectPath)) {
Block *block = m_blockDevices.take(dbusObjectPath);
clearPartitionWait(dbusObjectPath, false);
delete block;
}
}

Block *BlockDevices::device(const QString &dbusObjectPath) const
Expand Down Expand Up @@ -189,16 +192,22 @@ void BlockDevices::clearPartitionWait(const QString &dbusObjectPath, bool destro

void BlockDevices::removeInterfaces(const QString &dbusObjectPath, const QStringList &interfaces)
{
if (contains(dbusObjectPath)) {
UDisks2::Block *block = device(dbusObjectPath);
clearPartitionWait(dbusObjectPath, false);

UDisks2::Block *block = device(dbusObjectPath);
if (block) {
if (interfaces.contains(UDISKS2_FILESYSTEM_INTERFACE)) {
block->removeInterface(UDISKS2_FILESYSTEM_INTERFACE);
}
if (interfaces.contains(UDISKS2_ENCRYPTED_INTERFACE)) {
block->removeInterface(UDISKS2_ENCRYPTED_INTERFACE);
}

if (interfaces.contains(UDISKS2_BLOCK_INTERFACE)) {
delete block;
m_blockDevices.remove(dbusObjectPath);
}
}
clearPartitionWait(dbusObjectPath, true);
}

bool BlockDevices::isExternal(const QString &dbusObjectPath)
Expand All @@ -210,7 +219,8 @@ bool BlockDevices::isExternal(const QString &dbusObjectPath)
void BlockDevices::blockCompleted()
{
Block *completedBlock = qobject_cast<Block *>(sender());
if (completedBlock->isPartitionTable() || (completedBlock->hasInterface(UDISKS2_BLOCK_INTERFACE) && completedBlock->interfaceCount() == 1)) {
if (completedBlock->isValid() && (completedBlock->isPartitionTable() ||
(completedBlock->hasInterface(UDISKS2_BLOCK_INTERFACE) && completedBlock->interfaceCount() == 1)) ){
qCInfo(lcMemoryCardLog) << "Start waiting for block" << completedBlock->device();
waitPartition(completedBlock);
return;
Expand Down

0 comments on commit 9b5b458

Please sign in to comment.