mirror of
https://github.com/gchq/CyberChef.git
synced 2024-11-02 14:11:02 +01:00
Added numeric validation for arguments in Binary and Hex operattions. Fixes #1178
This commit is contained in:
parent
95884d77cf
commit
1e0e7f16a7
@ -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, "");
|
||||||
|
|
||||||
|
@ -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, "");
|
||||||
|
@ -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 = "";
|
||||||
|
@ -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 = [
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user