Merge pull request #3325 from kapodamy/int-overflow-2-fixes

Integer overflow fixes in downloader
This commit is contained in:
Tobias Groza 2020-04-01 22:29:39 +02:00 committed by GitHub
commit da2b059802
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 12 deletions

View File

@ -69,6 +69,11 @@ public class DataReader {
return primitive[0] << 24 | primitive[1] << 16 | primitive[2] << 8 | primitive[3];
}
public long readUnsignedInt() throws IOException {
long value = readInt();
return value & 0xffffffffL;
}
public short readShort() throws IOException {
primitiveRead(SHORT_SIZE);
return (short) (primitive[0] << 8 | primitive[1]);

View File

@ -294,10 +294,6 @@ public class Mp4DashReader {
private long readUint() throws IOException {
return stream.readInt() & 0xffffffffL;
}
public static boolean hasFlag(int flags, int mask) {
return (flags & mask) == mask;
}
@ -317,7 +313,7 @@ public class Mp4DashReader {
private Box readBox() throws IOException {
Box b = new Box();
b.offset = stream.position();
b.size = stream.readInt();
b.size = stream.readUnsignedInt();
b.type = stream.readInt();
if (b.size == 1) {
@ -478,7 +474,7 @@ public class Mp4DashReader {
private long parse_tfdt() throws IOException {
int version = stream.read();
stream.skipBytes(3);// flags
return version == 0 ? readUint() : stream.readLong();
return version == 0 ? stream.readUnsignedInt() : stream.readLong();
}
private Trun parse_trun() throws IOException {
@ -551,7 +547,7 @@ public class Mp4DashReader {
stream.skipBytes(2 * (version == 0 ? 4 : 8));
Mvhd obj = new Mvhd();
obj.timeScale = readUint();
obj.timeScale = stream.readUnsignedInt();
// chunkDuration
stream.skipBytes(version == 0 ? 4 : 8);
@ -563,7 +559,7 @@ public class Mp4DashReader {
// predefined
stream.skipBytes(76);
obj.nextTrackId = readUint();
obj.nextTrackId = stream.readUnsignedInt();
return obj;
}
@ -582,7 +578,7 @@ public class Mp4DashReader {
stream.skipBytes(4);// reserved
obj.duration = version == 0 ? readUint() : stream.readLong();
obj.duration = version == 0 ? stream.readUnsignedInt() : stream.readLong();
stream.skipBytes(2 * 4);// reserved

View File

@ -46,7 +46,7 @@ public class Mp4FromDashWriter {
private int overrideMainBrand = 0x00;
private ArrayList<Integer> compatibleBrands = new ArrayList<>(5);
private final ArrayList<Integer> compatibleBrands = new ArrayList<>(5);
public Mp4FromDashWriter(SharpStream... sources) throws IOException {
for (SharpStream src : sources) {

View File

@ -104,7 +104,7 @@ public class ChunkFileInputStream extends SharpStream {
@Override
public long available() {
return (int) (length - position);
return length - position;
}
@SuppressWarnings("EmptyCatchBlock")

View File

@ -221,7 +221,7 @@ public class CircularFileWriter extends SharpStream {
available = out.length - offsetOut;
}
int length = Math.min(len, (int) available);
int length = Math.min(len, (int) Math.min(Integer.MAX_VALUE, available));
out.write(b, off, length);
len -= length;