Security Advisories (2)
CVE-2026-49145 (2026-07-08)

App::Ack versions through 3.10.0 for Perl read arbitrary files via --files-from in a project .ackrc. ack searches up the directory hierarchy from the current directory for a project .ackrc and loads its options. The project-source option blocklist in App::Ack::ConfigLoader does not include --files-from, so a project .ackrc can set it to a path whose listed files ack then reads and searches. Version 3.10.0 added --follow to the blocklist; --files-from remains accepted. A project .ackrc committed to an untrusted repository can make ack read files outside the project and print their matching lines.

CVE-2026-49147 (2026-07-08)

App::Ack versions through 3.10.0 for Perl print unsanitised terminal escape sequences from filenames in several output modes. When ack prints a filename whose basename contains terminal control bytes such as ANSI escape sequences, those bytes reach the terminal unchanged. Version 3.10.0 added a _safe_filename helper that sanitises the filenames printed by -f, -g, the colored match heading, and per-match lines, but the --show-types, -l/-L, and -c paths still emit the raw filename. A file whose name embeds cursor-movement or color escapes can overwrite or recolor earlier terminal output, or be passed unchanged to a downstream consumer.

NAME

App::Ack::File

DESCRIPTION

Abstracts a file from the filesystem.

METHODS

new( $filename )

Opens the file specified by $filename and returns a filehandle and a flag that says whether it could be binary.

If there's a failure, it throws a warning and returns an empty list.

$file->name()

Returns the name of the file.

$file->basename()

Returns the basename (the last component the path) of the file.

$file->open()

Opens a filehandle for reading this file and returns it, or returns undef if the operation fails (the error is in $!). Instead of calling close $fh, $file->close should be called.

$file->reset()

Resets the file back to the beginning. This is only called if may_be_present() is true, but not always if may_be_present() is true.

$file->close()

Close the file.

$file->clone()

Clones this file.

$file->firstliney()

Returns the first line of a file (or first 250 characters, whichever comes first).