Commit 016d49f5 authored by Karsten Loesing's avatar Karsten Loesing
Browse files

Fix a bug in recognizing bandwidth files.

We're using a regular expression on the first 100 characters of a
descriptor to recognize bandwidth files. More specifically, if a
descriptor starts with ten digits followed by a newline, we parse it
as a bandwidth file. (This is ugly, but the legacy bandwidth file
format doesn't give us much of a choice.)

This regular expression is broken. The regular expression we want is
one that matches the first 100 characters of a descriptor, which ours
didn't do.

More detailed explanation of the code change:

 - We don't need to start the pattern with `^`, because the regular
   expression needs to match the whole string anyway.
 - The `(?s)` part enables the dotall mode: "In dotall mode, the
   expression . matches any character, including a line terminator. By
   default this expression does not match line terminators. Dotall
   mode can also be enabled via the embedded flag expression (?s).
   (The s is a mnemonic for "single-line" mode, which is what this is
   called in Perl.)"
 - We need to end the pattern with `.*` to match any characters
   following the first newline, which also includes newlines due to
   the previously enabled dotall mode.

Fixes #30369.
parent 492ef35d
# Changes in version 2.6.1 - 2019-05-??
* Medium changes
- Fix a bug in recognizing descriptors as bandwidth files.
# Changes in version 2.6.0 - 2019-04-29
* Medium changes
......@@ -132,7 +132,7 @@ public class DescriptorParserImpl implements DescriptorParser {
} else if (fileName.contains(LogDescriptorImpl.MARKER)) {
return LogDescriptorImpl.parse(rawDescriptorBytes, sourceFile, fileName);
} else if (firstLines.matches("^[0-9]{10}\\n")) {
} else if (firstLines.matches("(?s)[0-9]{10}\\n.*")) {
/* Identifying bandwidth files by a 10-digit timestamp in the first line
* breaks with files generated before 2002 or after 2286 and when the next
* descriptor identifier starts with just a timestamp in the first line
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment