Skip to content
Permalink
Browse files Browse the repository at this point in the history
Pass the ARCHIVE_EXTRACT_SECURE_SYMLINKS flag to libarchive
There are archive types which allow to first create a symlink and then
later on dereference it. If the symlink points outside of the archive,
this results in writing outside of the destination directory.

With the ARCHIVE_EXTRACT_SECURE_SYMLINKS option set, libarchive avoids
this situation by verifying that none of the target path components are
symlinks before writing.

Remove the commented out code in the method, which would actually
misbehave if enabled again.

Signed-off-by: Fabian Vogt <fabian@ritter-vogt.de>
  • Loading branch information
Vogtinator authored and tsdgeos committed Aug 27, 2020
1 parent ddd3641 commit 8bf8c5e
Showing 1 changed file with 3 additions and 15 deletions.
18 changes: 3 additions & 15 deletions plugins/libarchive/libarchiveplugin.cpp
Expand Up @@ -509,21 +509,9 @@ void LibarchivePlugin::emitEntryFromArchiveEntry(struct archive_entry *aentry)

int LibarchivePlugin::extractionFlags() const
{
int result = ARCHIVE_EXTRACT_TIME;
result |= ARCHIVE_EXTRACT_SECURE_NODOTDOT;

// TODO: Don't use arksettings here
/*if ( ArkSettings::preservePerms() )
{
result &= ARCHIVE_EXTRACT_PERM;
}
if ( !ArkSettings::extractOverwrite() )
{
result &= ARCHIVE_EXTRACT_NO_OVERWRITE;
}*/

return result;
return ARCHIVE_EXTRACT_TIME
| ARCHIVE_EXTRACT_SECURE_NODOTDOT
| ARCHIVE_EXTRACT_SECURE_SYMLINKS;
}

void LibarchivePlugin::copyData(const QString& filename, struct archive *dest, bool partialprogress)
Expand Down

0 comments on commit 8bf8c5e

Please sign in to comment.