CrackMe.apk
Download file
package com.google.android.exoplayer2.extractor.ogg;
import com.google.android.exoplayer2.ParserException;
import com.google.android.exoplayer2.extractor.Extractor;
import com.google.android.exoplayer2.extractor.ExtractorInput;
import com.google.android.exoplayer2.extractor.ExtractorOutput;
import com.google.android.exoplayer2.extractor.ExtractorsFactory;
import com.google.android.exoplayer2.extractor.PositionHolder;
import com.google.android.exoplayer2.extractor.TrackOutput;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.ParsableByteArray;
import java.io.IOException;
import org.checkerframework.checker.nullness.qual.EnsuresNonNullIf;
public class OggExtractor implements Extractor {
public static final ExtractorsFactory FACTORY = OggExtractor$$ExternalSyntheticLambda0.INSTANCE;
private static final int MAX_VERIFICATION_BYTES = 8;
private ExtractorOutput output;
private StreamReader streamReader;
private boolean streamReaderInitialized;
public void release() {
}
static /* synthetic */ Extractor[] lambda$static$0() {
return new Extractor[]{new OggExtractor()};
}
public boolean sniff(ExtractorInput extractorInput) throws IOException {
try {
return sniffInternal(extractorInput);
} catch (ParserException unused) {
return false;
}
}
public void init(ExtractorOutput extractorOutput) {
this.output = extractorOutput;
}
public void seek(long j, long j2) {
StreamReader streamReader2 = this.streamReader;
if (streamReader2 != null) {
streamReader2.seek(j, j2);
}
}
public int read(ExtractorInput extractorInput, PositionHolder positionHolder) throws IOException {
Assertions.checkStateNotNull(this.output);
if (this.streamReader == null) {
if (sniffInternal(extractorInput)) {
extractorInput.resetPeekPosition();
} else {
throw ParserException.createForMalformedContainer("Failed to determine bitstream type", (Throwable) null);
}
}
if (!this.streamReaderInitialized) {
TrackOutput track = this.output.track(0, 1);
this.output.endTracks();
this.streamReader.init(this.output, track);
this.streamReaderInitialized = true;
}
return this.streamReader.read(extractorInput, positionHolder);
}
@EnsuresNonNullIf(expression = {"streamReader"}, result = true)
private boolean sniffInternal(ExtractorInput extractorInput) throws IOException {
OggPageHeader oggPageHeader = new OggPageHeader();
if (oggPageHeader.populate(extractorInput, true) && (oggPageHeader.type & 2) == 2) {
int min = Math.min(oggPageHeader.bodySize, 8);
ParsableByteArray parsableByteArray = new ParsableByteArray(min);
extractorInput.peekFully(parsableByteArray.getData(), 0, min);
if (FlacReader.verifyBitstreamType(resetPosition(parsableByteArray))) {
this.streamReader = new FlacReader();
} else if (VorbisReader.verifyBitstreamType(resetPosition(parsableByteArray))) {
this.streamReader = new VorbisReader();
} else if (OpusReader.verifyBitstreamType(resetPosition(parsableByteArray))) {
this.streamReader = new OpusReader();
}
return true;
}
return false;
}
private static ParsableByteArray resetPosition(ParsableByteArray parsableByteArray) {
parsableByteArray.setPosition(0);
return parsableByteArray;
}
}
Download file