Skip to content

Commit 96b152a

Browse files
committed
validate the original name index range
1 parent 2ad3923 commit 96b152a

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

code.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@
176176
for (let i = 0; i < vlqTable.length; i++) vlqTable[i] = 0xFF;
177177
for (let i = 0; i < vlqChars.length; i++) vlqTable[vlqChars.charCodeAt(i)] = i;
178178

179-
function decodeMappings(mappings, sourcesCount) {
179+
function decodeMappings(mappings, sourcesCount, namesCount) {
180180
const n = mappings.length;
181181
let data = new Int32Array(1024);
182182
let dataLength = 0;
@@ -203,11 +203,11 @@
203203
// Scan over the input
204204
while (true) {
205205
// Read a byte
206-
if (i >= mappings.length) decodeError('Expected extra data');
206+
if (i >= mappings.length) decodeError('Unexpected early end of mapping data');
207207
const c = mappings.charCodeAt(i);
208-
if ((c & 0x7F) !== c) decodeError('Invalid character');
208+
if ((c & 0x7F) !== c) decodeError(`Invalid mapping character: ${JSON.stringify(String.fromCharCode(c))}`);
209209
const index = vlqTable[c & 0x7F];
210-
if (index === 0xFF) decodeError('Invalid character');
210+
if (index === 0xFF) decodeError(`Invalid mapping character: ${JSON.stringify(String.fromCharCode(c))}`);
211211
i++;
212212

213213
// Decode the byte
@@ -273,7 +273,7 @@
273273
const generatedColumnDelta = decodeVLQ();
274274
if (generatedColumnDelta < 0) needToSortGeneratedColumns = true;
275275
generatedColumn += generatedColumnDelta;
276-
if (generatedColumn < 0) decodeError('Invalid generated column');
276+
if (generatedColumn < 0) decodeError(`Invalid generated column: ${generatedColumn}`);
277277

278278
// It's valid for a mapping to have 1, 4, or 5 variable-length fields
279279
let isOriginalSourceMissing = true;
@@ -288,17 +288,17 @@
288288
// Read the original source
289289
const originalSourceDelta = decodeVLQ();
290290
originalSource += originalSourceDelta;
291-
if (originalSource < 0 || originalSource >= sourcesCount) decodeError('Invalid original source');
291+
if (originalSource < 0 || originalSource >= sourcesCount) decodeError(`Original source index ${originalSource} is invalid (there are ${sourcesCount} sources)`);
292292

293293
// Read the original line
294294
const originalLineDelta = decodeVLQ();
295295
originalLine += originalLineDelta;
296-
if (originalLine < 0) decodeError('Invalid original line');
296+
if (originalLine < 0) decodeError(`Invalid original line: ${originalLine}`);
297297

298298
// Read the original column
299299
const originalColumnDelta = decodeVLQ();
300300
originalColumn += originalColumnDelta;
301-
if (originalColumn < 0) decodeError('Invalid original column');
301+
if (originalColumn < 0) decodeError(`Invalid original column: ${originalColumn}`);
302302

303303
// Check for the optional name index
304304
if (i < n) {
@@ -311,15 +311,15 @@
311311
// Read the optional name index
312312
const originalNameDelta = decodeVLQ();
313313
originalName += originalNameDelta;
314-
if (originalName < 0) decodeError('Invalid original name');
314+
if (originalName < 0 || originalName >= namesCount) decodeError(`Original name index ${originalName} is invalid (there are ${namesCount} names)`);
315315

316316
// Handle the next character
317317
if (i < n) {
318318
c = mappings.charCodeAt(i);
319319
if (c === 44 /* , */) {
320320
i++;
321321
} else if (c !== 59 /* ; */) {
322-
decodeError('Invalid character after mapping');
322+
decodeError(`Invalid character after mapping: ${JSON.stringify(String.fromCharCode(c))}`);
323323
}
324324
}
325325
}
@@ -472,7 +472,7 @@
472472
};
473473
}
474474

475-
const data = decodeMappings(mappings, sources.length);
475+
const data = decodeMappings(mappings, sources.length, names.length);
476476
generateInverseMappings(sources, data);
477477
return { sources, names, data };
478478
}

0 commit comments

Comments
 (0)