Validate audio codec strings

This commit is contained in:
Vanilagy
2025-01-02 20:21:49 +01:00
parent 9ac0519217
commit 2471f55f20
6 changed files with 115 additions and 29 deletions
+3 -1
View File
@@ -742,7 +742,9 @@ export const dOps = (trackData: IsobmffAudioTrackData) => {
// https://www.rfc-editor.org/rfc/rfc7845#section-5
const description = trackData.info.decoderConfig?.description;
if (description) {
assert(description.byteLength >= 18); // Is validated in an earlier step
if (description.byteLength < 18) {
throw new Error('Opus decoder description is too short (must be at least 18 bytes).');
}
const view = ArrayBuffer.isView(description)
? new DataView(description.buffer, description.byteOffset, description.byteLength)
+9 -9
View File
@@ -766,18 +766,18 @@ export class IsobmffDemuxer extends Demuxer {
if (sampleSize > 0 && sampleSize <= 64) {
if (isFloat) {
if (sampleSize === 32 && !isBigEndian) {
track.info.codec = isBigEndian ? 'pcm-f32be' : 'pcm-f32le';
track.info.codec = isBigEndian ? 'pcm-f32be' : 'pcm-f32';
}
} else {
if (sFlags & (1 << (bytesPerSample - 1))) {
if (bytesPerSample === 1) {
track.info.codec = 'pcm-s8';
} else if (bytesPerSample === 2) {
track.info.codec = isBigEndian ? 'pcm-s16be' : 'pcm-s16le';
track.info.codec = isBigEndian ? 'pcm-s16be' : 'pcm-s16';
} else if (bytesPerSample === 3) {
track.info.codec = isBigEndian ? 'pcm-s24be' : 'pcm-s24le';
track.info.codec = isBigEndian ? 'pcm-s24be' : 'pcm-s24';
} else if (bytesPerSample === 4) {
track.info.codec = isBigEndian ? 'pcm-s32be' : 'pcm-s32le';
track.info.codec = isBigEndian ? 'pcm-s32be' : 'pcm-s32';
}
} else {
if (bytesPerSample === 1) {
@@ -809,7 +809,7 @@ export class IsobmffDemuxer extends Demuxer {
if (sampleSize === 8) {
track.info.codec = 'pcm-s8';
} else if (sampleSize === 16) {
track.info.codec = 'pcm-s16le';
track.info.codec = 'pcm-s16';
} else {
throw new Error(`Unsupported sample size ${sampleSize} for codec 'sowt'.`);
}
@@ -1014,13 +1014,13 @@ export class IsobmffDemuxer extends Demuxer {
if (littleEndian) {
if (track.info.codec === 'pcm-s16be') {
track.info.codec = 'pcm-s16le';
track.info.codec = 'pcm-s16';
} else if (track.info.codec === 'pcm-s24be') {
track.info.codec = 'pcm-s24le';
track.info.codec = 'pcm-s24';
} else if (track.info.codec === 'pcm-s32be') {
track.info.codec = 'pcm-s32le';
track.info.codec = 'pcm-s32';
} else if (track.info.codec === 'pcm-f32be') {
track.info.codec = 'pcm-f32le';
track.info.codec = 'pcm-f32';
}
}
}; break;