From 9109c39202e96330872435fc23252f935a1ede0f Mon Sep 17 00:00:00 2001 From: Daniel Bowder Date: Thu, 30 Jun 2022 17:09:47 -0700 Subject: [PATCH] fix #3593: add CpuSet type to js Regex parses a cpuset via 2 matches. Find number(s) or range(s) folowed by a comma, then, find a single number or a single range not followed by a comma. E.g., 0-1,4-5,6,7,10,11,14-15 CpuSet function first checks regex, then ensures left num <= right num Signed-off-by: Daniel Bowder --- src/Toolkit.js | 20 ++++++++++++++++++++ src/Utils.js | 2 ++ 2 files changed, 22 insertions(+) diff --git a/src/Toolkit.js b/src/Toolkit.js index c730374..9a13ba5 100644 --- a/src/Toolkit.js +++ b/src/Toolkit.js @@ -121,6 +121,26 @@ Ext.apply(Ext.form.field.VTypes, { }, HttpProxyText: gettext('Example') + ": http://username:password@host:port/", + CpuSet: function(v) { + if (!Proxmox.Utils.CpuSet_match.test(v)) { + return false; + } + let groups = v.split(","); + for (let i = 0; i < groups.length; i++) { + if (!groups[i].includes("-")) { + continue; + } + let values = groups[i].split("-"); + let left = parseInt(values[0], 10); + let right = parseInt(values[1], 10); + if (left > right) { + return false; + } + } + return true; + }, + CpuSetText: gettext('This is not a valid CpuSet'), + DnsName: function(v) { return Proxmox.Utils.DnsName_match.test(v); }, diff --git a/src/Utils.js b/src/Utils.js index 6a03057..87afbea 100644 --- a/src/Utils.js +++ b/src/Utils.js @@ -1315,6 +1315,8 @@ utilities: { me.DnsName_match = new RegExp("^" + DnsName_REGEXP + "$"); me.DnsName_or_Wildcard_match = new RegExp("^(?:\\*\\.)?" + DnsName_REGEXP + "$"); + me.CpuSet_match = /^(?:(?:[0-9]+,)|(?:[0-9]+-[0-9]+,))*(?:(?:[0-9]+)$|(?:[0-9]+-[0-9]+)$)/; + me.HostPort_match = new RegExp("^(" + IPV4_REGEXP + "|" + DnsName_REGEXP + ")(?::(\\d+))?$"); me.HostPortBrackets_match = new RegExp("^\\[(" + IPV6_REGEXP + "|" + IPV4_REGEXP + "|" + DnsName_REGEXP + ")\\](?::(\\d+))?$"); me.IP6_dotnotation_match = new RegExp("^(" + IPV6_REGEXP + ")(?:\\.(\\d+))?$");