Commit a226bd0d by kimvde Committed by Oliver Woodman

Fix extractor sniffing in FLAC extension

Assuming that a flac stream starts with bytes
['f', 'L', 'a', 'C', 0, 0, 0, 0x22] is not always correct as it could
also start with ['f', 'L', 'a', 'C', 0x80, 0, 0, 0x22]
(see https://xiph.org/flac/format.html#metadata_block_streaminfo).

PiperOrigin-RevId: 279080562
parent 355ed11a
...@@ -72,11 +72,8 @@ public final class FlacExtractor implements Extractor { ...@@ -72,11 +72,8 @@ public final class FlacExtractor implements Extractor {
*/ */
public static final int FLAG_DISABLE_ID3_METADATA = 1; public static final int FLAG_DISABLE_ID3_METADATA = 1;
/** /** FLAC stream marker */
* FLAC signature: first 4 is the signature word, second 4 is the sizeof STREAMINFO. 0x22 is the private static final byte[] FLAC_STREAM_MARKER = {'f', 'L', 'a', 'C'};
* mandatory STREAMINFO.
*/
private static final byte[] FLAC_SIGNATURE = {'f', 'L', 'a', 'C', 0, 0, 0, 0x22};
private final ParsableByteArray outputBuffer; private final ParsableByteArray outputBuffer;
private final Id3Peeker id3Peeker; private final Id3Peeker id3Peeker;
...@@ -126,7 +123,7 @@ public final class FlacExtractor implements Extractor { ...@@ -126,7 +123,7 @@ public final class FlacExtractor implements Extractor {
if (input.getPosition() == 0) { if (input.getPosition() == 0) {
id3Metadata = peekId3Data(input); id3Metadata = peekId3Data(input);
} }
return peekFlacSignature(input); return peekFlacStreamMarker(input);
} }
@Override @Override
...@@ -255,15 +252,15 @@ public final class FlacExtractor implements Extractor { ...@@ -255,15 +252,15 @@ public final class FlacExtractor implements Extractor {
} }
/** /**
* Peeks from the beginning of the input to see if {@link #FLAC_SIGNATURE} is present. * Peeks from the beginning of the input to see if {@link #FLAC_STREAM_MARKER} is present.
* *
* @return Whether the input begins with {@link #FLAC_SIGNATURE}. * @return Whether the input begins with {@link #FLAC_STREAM_MARKER}.
*/ */
private static boolean peekFlacSignature(ExtractorInput input) private static boolean peekFlacStreamMarker(ExtractorInput input)
throws IOException, InterruptedException { throws IOException, InterruptedException {
byte[] header = new byte[FLAC_SIGNATURE.length]; byte[] header = new byte[FLAC_STREAM_MARKER.length];
input.peekFully(header, /* offset= */ 0, FLAC_SIGNATURE.length); input.peekFully(header, /* offset= */ 0, FLAC_STREAM_MARKER.length);
return Arrays.equals(header, FLAC_SIGNATURE); return Arrays.equals(header, FLAC_STREAM_MARKER);
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment