Fix MD2 rounds validation

Reject negative and fractional MD2 round counts before passing the option into the hash implementation. This prevents negative rounds from producing an all-zero digest while preserving zero and positive integer round counts.

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
marko1olo 2026-06-06 06:51:53 +04:00
parent d735496641
commit 229fc61179
2 changed files with 29 additions and 1 deletions

View File

@ -6,6 +6,7 @@
import Operation from "../Operation.mjs"; import Operation from "../Operation.mjs";
import {runHash} from "../lib/Hash.mjs"; import {runHash} from "../lib/Hash.mjs";
import OperationError from "../errors/OperationError.mjs";
/** /**
* MD2 operation * MD2 operation
@ -40,7 +41,12 @@ class MD2 extends Operation {
* @returns {string} * @returns {string}
*/ */
run(input, args) { run(input, args) {
return runHash("md2", input, {rounds: args[0]}); const rounds = args[0] ?? 18;
if (!Number.isInteger(rounds) || rounds < 0)
throw new OperationError("Rounds must be a non-negative integer");
return runHash("md2", input, {rounds});
} }
} }

View File

@ -19,6 +19,28 @@ TestRegister.addTests([
} }
] ]
}, },
{
name: "MD2 rejects negative rounds",
input: "Hello, World!",
expectedOutput: "Rounds must be a non-negative integer",
recipeConfig: [
{
"op": "MD2",
"args": [-1]
}
]
},
{
name: "MD2 rejects fractional rounds",
input: "Hello, World!",
expectedOutput: "Rounds must be a non-negative integer",
recipeConfig: [
{
"op": "MD2",
"args": [1.2]
}
]
},
{ {
name: "MD4", name: "MD4",
input: "Hello, World!", input: "Hello, World!",