{"id":"e718e328323a8fac","repo":"jestjs/jest","slug":"jest-diff-sequences-name-value-arg-is-not","errorCode":null,"errorMessage":"@jest/diff-sequences: ${name} value ${arg} is not a safe integer","messagePattern":"@jest/diff-sequences: (.+?) value (.+?) is not a safe integer","errorType":"validation","errorClass":"RangeError","httpStatus":null,"severity":"error","filePath":"packages/diff-sequences/src/index.ts","lineNumber":764,"sourceCode":"      aStartFollowing,\n      aEnd,\n      bStartFollowing,\n      bEnd,\n      transposed,\n      callbacks,\n      aIndexesF,\n      aIndexesR,\n      division,\n    );\n  }\n};\n\nconst validateLength = (name: string, arg: unknown) => {\n  if (typeof arg !== 'number') {\n    throw new TypeError(`${pkg}: ${name} typeof ${typeof arg} is not a number`);\n  }\n  if (!Number.isSafeInteger(arg)) {\n    throw new RangeError(`${pkg}: ${name} value ${arg} is not a safe integer`);\n  }\n  if (arg < 0) {\n    throw new RangeError(`${pkg}: ${name} value ${arg} is a negative integer`);\n  }\n};\n\nconst validateCallback = (name: string, arg: unknown) => {\n  const type = typeof arg;\n  if (type !== 'function') {\n    throw new TypeError(`${pkg}: ${name} typeof ${type} is not a function`);\n  }\n};\n\n// Compare items in two sequences to find a longest common subsequence.\n// Given lengths of sequences and input function to compare items at indexes,\n// return by output function the number of adjacent items and starting indexes\n// of each common subsequence.\nexport default function diffSequence(","sourceCodeStart":746,"sourceCodeEnd":782,"githubUrl":"https://github.com/jestjs/jest/blob/f49721c78e195558b40913977c9230f5b7f559d8/packages/diff-sequences/src/index.ts#L746-L782","documentation":"validateLength's second guard requires Number.isSafeInteger, rejecting NaN, +/-Infinity, and non-integer numbers, plus integers beyond 2^53-1. The LCS algorithm allocates index arrays and does integer arithmetic, so unsafe/large or non-finite values would silently corrupt results or overflow.","triggerScenarios":"Passing a length that is NaN (e.g., reading .length off something without one), Infinity, a fractional number like 5.5, or a value > Number.MAX_SAFE_INTEGER as aLength/bLength.","commonSituations":"Passing the result of a broken length computation; confusing a count with a float; streaming/very-large inputs where length exceeds the safe-integer range.","solutions":["Ensure the length is a finite integer computed from a real collection (Array.length, String.length).","Sanitize upstream: `if (!Number.isSafeInteger(len)) throw new RangeError('bad length')`.","For huge inputs, chunk the sequences so each diff call stays within safe-integer range."],"exampleFix":"// before\ndiffSequence(Number.parseFloat(input), other.length, isCommon, foundSubsequence); // NaN or 5.5\n\n// after\nconst len = Number.isFinite(input) ? Math.trunc(input) : 0;\ndiffSequence(len, other.length, isCommon, foundSubsequence);","handlingStrategy":"validation","validationCode":"if (!Number.isSafeInteger(aLength) || !Number.isSafeInteger(bLength)) {\n  throw new RangeError('diffSequence lengths must be safe integers');\n}","typeGuard":"function isSafeLength(x: unknown): x is number {\n  return typeof x === 'number' && Number.isSafeInteger(x) && x >= 0;\n}","tryCatchPattern":"try {\n  diffSequence(aLength, bLength, isCommon, foundSubsequence);\n} catch (e) {\n  if (e instanceof RangeError && /not a safe integer/.test(e.message)) { /* split input or reject */ }\n  throw e;\n}","preventionTips":["Reject NaN/Infinity/fractional lengths at the boundary of your wrapper.","For very large inputs, chunk sequences so each call stays within safe-integer range.","Assert Number.isSafeInteger on any externally sourced length."],"tags":["diff-sequences","validation","range-error","precondition"],"analyzedSha":"f49721c78e195558b40913977c9230f5b7f559d8","analyzedAt":"2026-08-03T20:16:28.571Z","schemaVersion":2}