Added numeric validation for arguments in Binary and Hex operattions. Fixes #1178

This commit is contained in:
n1474335 2021-02-22 19:13:38 +00:00
parent 95884d77cf
commit 1e0e7f16a7
5 changed files with 18 additions and 4 deletions

View File

@ -7,6 +7,7 @@
*/ */
import Utils from "../Utils.mjs"; import Utils from "../Utils.mjs";
import OperationError from "../errors/OperationError.mjs";
/** /**
@ -58,6 +59,9 @@ export function toBinary(data, delim="Space", padding=8) {
* fromBinary("00010000:00100000:00110000", "Colon"); * fromBinary("00010000:00100000:00110000", "Colon");
*/ */
export function fromBinary(data, delim="Space", byteLen=8) { export function fromBinary(data, delim="Space", byteLen=8) {
if (byteLen < 1 || Math.round(byteLen) !== byteLen)
throw new OperationError("Byte length must be a positive integer");
const delimRegex = Utils.regexRep(delim); const delimRegex = Utils.regexRep(delim);
data = data.replace(delimRegex, ""); data = data.replace(delimRegex, "");

View File

@ -7,6 +7,7 @@
*/ */
import Utils from "../Utils.mjs"; import Utils from "../Utils.mjs";
import OperationError from "../errors/OperationError.mjs";
/** /**
@ -100,6 +101,9 @@ export function toHexFast(data) {
* fromHex("0a:14:1e", "Colon"); * fromHex("0a:14:1e", "Colon");
*/ */
export function fromHex(data, delim="Auto", byteLen=2) { export function fromHex(data, delim="Auto", byteLen=2) {
if (byteLen < 1 || Math.round(byteLen) !== byteLen)
throw new OperationError("Byte length must be a positive integer");
if (delim !== "None") { if (delim !== "None") {
const delimRegex = delim === "Auto" ? /[^a-f\d]|(0x)/gi : Utils.regexRep(delim); const delimRegex = delim === "Auto" ? /[^a-f\d]|(0x)/gi : Utils.regexRep(delim);
data = data.replace(delimRegex, ""); data = data.replace(delimRegex, "");

View File

@ -15,7 +15,7 @@ import { toHex, fromHex } from "./Hex.mjs";
* @param {number} indent * @param {number} indent
* @returns {string} * @returns {string}
*/ */
export function formatDnStr (dnStr, indent) { export function formatDnStr(dnStr, indent) {
const fields = dnStr.substr(1).replace(/([^\\])\//g, "$1$1/").split(/[^\\]\//); const fields = dnStr.substr(1).replace(/([^\\])\//g, "$1$1/").split(/[^\\]\//);
let output = "", let output = "",
maxKeyLen = 0, maxKeyLen = 0,
@ -54,7 +54,7 @@ export function formatDnStr (dnStr, indent) {
* @param {number} indent * @param {number} indent
* @returns {string} * @returns {string}
*/ */
export function formatByteStr (byteStr, length, indent) { export function formatByteStr(byteStr, length, indent) {
byteStr = toHex(fromHex(byteStr), ":"); byteStr = toHex(fromHex(byteStr), ":");
length = length * 3; length = length * 3;
let output = ""; let output = "";

View File

@ -35,7 +35,8 @@ class FromBinary extends Operation {
{ {
"name": "Byte Length", "name": "Byte Length",
"type": "number", "type": "number",
"value": 8 "value": 8,
"min": 1
} }
]; ];
this.checks = [ this.checks = [

View File

@ -6,6 +6,7 @@
import Operation from "../Operation.mjs"; import Operation from "../Operation.mjs";
import Utils from "../Utils.mjs"; import Utils from "../Utils.mjs";
import OperationError from "../errors/OperationError.mjs";
/** /**
* To Hexdump operation * To Hexdump operation
@ -28,7 +29,8 @@ class ToHexdump extends Operation {
{ {
"name": "Width", "name": "Width",
"type": "number", "type": "number",
"value": 16 "value": 16,
"min": 1
}, },
{ {
"name": "Upper case hex", "name": "Upper case hex",
@ -58,6 +60,9 @@ class ToHexdump extends Operation {
const [length, upperCase, includeFinalLength, unixFormat] = args; const [length, upperCase, includeFinalLength, unixFormat] = args;
const padding = 2; const padding = 2;
if (length < 1 || Math.round(length) !== length)
throw new OperationError("Width must be a positive integer");
let output = ""; let output = "";
for (let i = 0; i < data.length; i += length) { for (let i = 0; i < data.length; i += length) {
const buff = data.slice(i, i+length); const buff = data.slice(i, i+length);