X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fio%2Fmp3%2FParser.java;h=bbdb5a3ad2e2d3bbaf7ff0adf3e135108568c0dd;hb=f96bea7f14c2de31de0c4ba344174278d0796a41;hp=8a7e7712c4d82d418f2872d7d7207fd1aaa9389e;hpb=675a3b5e7d6c6b90aa46a3c5b293a5583514ee28;p=sonitus.git
diff --git a/src/main/java/net/pterodactylus/sonitus/io/mp3/Parser.java b/src/main/java/net/pterodactylus/sonitus/io/mp3/Parser.java
index 8a7e771..bbdb5a3 100644
--- a/src/main/java/net/pterodactylus/sonitus/io/mp3/Parser.java
+++ b/src/main/java/net/pterodactylus/sonitus/io/mp3/Parser.java
@@ -53,16 +53,16 @@ public class Parser {
*/
public Parser(InputStream inputStream) throws IOException {
this.inputStream = inputStream;
- readFully(inputStream, buffer, 0, 3);
- if ((buffer[0] == 'I') && (buffer[1] == 'D') && (buffer[2] == '3')) {
- readFully(inputStream, buffer, 0, 3);
+ readFully(inputStream, buffer, 1, 3);
+ if ((buffer[1] == 'I') && (buffer[2] == 'D') && (buffer[3] == '3')) {
+ readFully(inputStream, buffer, 1, 3);
byte[] lengthBuffer = new byte[4];
readFully(inputStream, lengthBuffer, 0, 4);
int headerLength = (lengthBuffer[0] << 21) | (lengthBuffer[1] << 14) | (lengthBuffer[2] << 7) | lengthBuffer[3];
id3Tag = new byte[headerLength + 10];
- System.arraycopy(new byte[] { 'I', 'D', '3', buffer[0], buffer[1], buffer[2], lengthBuffer[0], lengthBuffer[1], lengthBuffer[2], lengthBuffer[3] }, 0, id3Tag, 0, 10);
+ System.arraycopy(new byte[] { 'I', 'D', '3', buffer[1], buffer[2], buffer[3], lengthBuffer[0], lengthBuffer[1], lengthBuffer[2], lengthBuffer[3] }, 0, id3Tag, 0, 10);
readFully(inputStream, id3Tag, 10, headerLength);
- readFully(inputStream, buffer, 0, 3);
+ readFully(inputStream, buffer, 1, 3);
} else {
id3Tag = null;
}
@@ -93,9 +93,17 @@ public class Parser {
}
System.arraycopy(buffer, 1, buffer, 0, 3);
buffer[3] = (byte) r;
- Optional frame = Frame.create(buffer, 0, 4);
- if (frame.isPresent()) {
- return frame.get();
+ if (Frame.isFrame(buffer, 0, 4)) {
+ int frameLength = Frame.getFrameLength(buffer, 0);
+ if (frameLength != -1) {
+ byte[] content = new byte[frameLength + 4];
+ readFully(inputStream, content, 4, frameLength);
+ System.arraycopy(buffer, 0, content, 0, 4);
+ Optional frame = Frame.create(content, 0, frameLength + 4);
+ if (frame.isPresent()) {
+ return frame.get();
+ }
+ }
}
}
}