Skip to content

Cannot add file named \ #743

Open
Open
@nwalters512

Description

@nwalters512

Consider the following code:

const archiver = require('archiver');

const archive = archiver('zip');

archive.append('hello, world!', { name: '\\' });

This is meant to add a file named \ to the archive. According to the specification (https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT), this should be allowed, and it's certainly allowed by standard implementations of the zip command (that is, touch '\' && zip -r test.zip '\' works as expected and produces an archive containing a single file \).

However, what happens in practice is that this fails with the following error message:

ArchiverError: entry name must be a non-empty string value

This happens because of the following line:

data.name = util.sanitizePath(data.name);

Which in turn runs this:

https://github.com/archiverjs/archiver-utils/blob/695387cdc4816a3d19edb6f1d5473e6395479567/index.js#L91-L93

sanitizePath transforms \ into the empty string.

The same underlying problem causes a different issue with the following code:

archive.append('hello, world!', { name: 'testing/\\' });

In this case, the name is transformed to testing/, which incorrectly results in the creation of a directory instead of a file with the specified contents.

One more example:

archive.append('hello, world!', { name: 'testing/foo\\bar.txt' });

This actually creates testing/foo/bar.txt, which is not at all what was intended.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions