aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Input/archive/archiveinputdevice.cpp1
-rw-r--r--src/plugins/Input/archive/archivetagreader.cpp12
-rw-r--r--src/plugins/Input/archive/decoderarchivefactory.cpp9
3 files changed, 18 insertions, 4 deletions
diff --git a/src/plugins/Input/archive/archiveinputdevice.cpp b/src/plugins/Input/archive/archiveinputdevice.cpp
index 5b11a2938..b4727192d 100644
--- a/src/plugins/Input/archive/archiveinputdevice.cpp
+++ b/src/plugins/Input/archive/archiveinputdevice.cpp
@@ -133,7 +133,6 @@ qint64 ArchiveInputDevice::readData(char *data, qint64 maxSize)
{
qWarning("ArchiveInputDevice: reading failed; libarchive error: %s", archive_error_string(m_archive));
setErrorString(QString::fromLocal8Bit(archive_error_string(m_archive)));
- close();
return -1;
}
}
diff --git a/src/plugins/Input/archive/archivetagreader.cpp b/src/plugins/Input/archive/archivetagreader.cpp
index 70820579e..5d87b55a4 100644
--- a/src/plugins/Input/archive/archivetagreader.cpp
+++ b/src/plugins/Input/archive/archivetagreader.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2016 by Ilya Kotov *
+ * Copyright (C) 2016-2019 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -46,8 +46,14 @@ public:
}
virtual TagLib::ByteVector readBlock(unsigned long length) override
{
- QByteArray data = m_input->read(length);
- return TagLib::ByteVector(data.constData(), data.size());
+ char data[length];
+ qint64 l = m_input->read(data, length);
+ if(l < 0)
+ {
+ m_input->close();
+ return TagLib::ByteVector();
+ }
+ return TagLib::ByteVector(data, l);
}
virtual void writeBlock(const TagLib::ByteVector &) override
{}
diff --git a/src/plugins/Input/archive/decoderarchivefactory.cpp b/src/plugins/Input/archive/decoderarchivefactory.cpp
index e96bbf007..6f6d0bf87 100644
--- a/src/plugins/Input/archive/decoderarchivefactory.cpp
+++ b/src/plugins/Input/archive/decoderarchivefactory.cpp
@@ -80,8 +80,17 @@ QList<TrackInfo *> DecoderArchiveFactory::createPlayList(const QString &path, Tr
qWarning("DecoderArchiveFactory: unable to open archive; libarchive error: %s", archive_error_string(a));
return list;
}
+
while (archive_read_next_header(a, &entry) == ARCHIVE_OK)
{
+ if(archive_read_has_encrypted_entries(a) == 1) //skip encrypted archives
+ {
+ qDeleteAll(list);
+ list.clear();
+ archive_read_free(a);
+ return list;
+ }
+
if(archive_entry_filetype(entry) == AE_IFREG)
{
QString filePath = QString::fromLocal8Bit(archive_entry_pathname(entry));