__proto__ deno compatibility
This commit is contained in:
parent
897e1813c2
commit
ae99a911a6
@ -90,6 +90,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page.
|
|||||||
|
|
||||||
| Version | Date | Comment |
|
| Version | Date | Comment |
|
||||||
| ------- | ---------- | --------------------------------------------------------------------------------------------------- |
|
| ------- | ---------- | --------------------------------------------------------------------------------------------------- |
|
||||||
|
| 5.24.3 | 2025-01-01 | `__proto__` deno compatibility |
|
||||||
| 5.24.2 | 2025-01-01 | `versions()` fixed node version |
|
| 5.24.2 | 2025-01-01 | `versions()` fixed node version |
|
||||||
| 5.24.1 | 2024-12-31 | `versions()` fixed deno and bun |
|
| 5.24.1 | 2024-12-31 | `versions()` fixed deno and bun |
|
||||||
| 5.24.0 | 2024-12-31 | `versions()` added deno and bun |
|
| 5.24.0 | 2024-12-31 | `versions()` added deno and bun |
|
||||||
|
|||||||
@ -57,6 +57,11 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">5.24.3</th>
|
||||||
|
<td>2025-01-01</td>
|
||||||
|
<td><span class="code">prototype pollution()</span> deno compatibility</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">5.24.2</th>
|
<th scope="row">5.24.2</th>
|
||||||
<td>2025-01-01</td>
|
<td>2025-01-01</td>
|
||||||
|
|||||||
@ -170,7 +170,7 @@
|
|||||||
<img class="logo" src="assets/logo.png" alt="logo">
|
<img class="logo" src="assets/logo.png" alt="logo">
|
||||||
<div class="title">systeminformation</div>
|
<div class="title">systeminformation</div>
|
||||||
<div class="subtitle"><span id="typed"></span> </div>
|
<div class="subtitle"><span id="typed"></span> </div>
|
||||||
<div class="version">New Version: <span id="version">5.24.2</span></div>
|
3<div class="version">New Version: <span id="version">5.24.2</span></div>
|
||||||
<button class="btn btn-light" onclick="location.href='https://github.com/sebhildebrandt/systeminformation'">View on Github <i class=" fab fa-github"></i></button>
|
<button class="btn btn-light" onclick="location.href='https://github.com/sebhildebrandt/systeminformation'">View on Github <i class=" fab fa-github"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="down">
|
<div class="down">
|
||||||
|
|||||||
22
docs/os.html
22
docs/os.html
@ -331,6 +331,26 @@ si.osInfo().then(data => console.log(data));</code></pre class="example">
|
|||||||
<td>X</td>
|
<td>X</td>
|
||||||
<td>node version</td>
|
<td>node version</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>deno</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>deno version</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td>bun</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>X</td>
|
||||||
|
<td>bun version</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>v8</td>
|
<td>v8</td>
|
||||||
@ -624,6 +644,8 @@ si.versions().then(data => console.log(data));</code></pre class="example">
|
|||||||
systemOpenssl: '2.8.3',
|
systemOpenssl: '2.8.3',
|
||||||
systemOpensslLib: 'LibreSSL',
|
systemOpensslLib: 'LibreSSL',
|
||||||
node: '13.8.0',
|
node: '13.8.0',
|
||||||
|
bun: '1.1.21',
|
||||||
|
deno: '2.1.4',
|
||||||
v8: '7.9.317.25-node.28',
|
v8: '7.9.317.25-node.28',
|
||||||
npm: '6.13.6',
|
npm: '6.13.6',
|
||||||
yarn: '',
|
yarn: '',
|
||||||
|
|||||||
@ -453,9 +453,13 @@ function dockerContainerStats(containerIDs, callback) {
|
|||||||
return resolve([]);
|
return resolve([]);
|
||||||
}
|
}
|
||||||
let containerIDsSanitized = '';
|
let containerIDsSanitized = '';
|
||||||
|
try {
|
||||||
containerIDsSanitized.__proto__.toLowerCase = util.stringToLower;
|
containerIDsSanitized.__proto__.toLowerCase = util.stringToLower;
|
||||||
containerIDsSanitized.__proto__.replace = util.stringReplace;
|
containerIDsSanitized.__proto__.replace = util.stringReplace;
|
||||||
containerIDsSanitized.__proto__.trim = util.stringTrim;
|
containerIDsSanitized.__proto__.trim = util.stringTrim;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(containerIDsSanitized, util.stringObj);
|
||||||
|
}
|
||||||
|
|
||||||
containerIDsSanitized = containerIDs;
|
containerIDsSanitized = containerIDs;
|
||||||
containerIDsSanitized = containerIDsSanitized.trim();
|
containerIDsSanitized = containerIDsSanitized.trim();
|
||||||
|
|||||||
@ -47,7 +47,12 @@ function inetChecksite(url, callback) {
|
|||||||
const l = util.mathMin(s.length, 2000);
|
const l = util.mathMin(s.length, 2000);
|
||||||
for (let i = 0; i <= l; i++) {
|
for (let i = 0; i <= l; i++) {
|
||||||
if (s[i] !== undefined) {
|
if (s[i] !== undefined) {
|
||||||
|
try {
|
||||||
s[i].__proto__.toLowerCase = util.stringToLower;
|
s[i].__proto__.toLowerCase = util.stringToLower;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(s[i], util.stringObj);
|
||||||
|
}
|
||||||
|
|
||||||
const sl = s[i].toLowerCase();
|
const sl = s[i].toLowerCase();
|
||||||
if (sl && sl[0] && !sl[1] && sl[0].length === 1) {
|
if (sl && sl[0] && !sl[1] && sl[0].length === 1) {
|
||||||
urlSanitized = urlSanitized + sl[0];
|
urlSanitized = urlSanitized + sl[0];
|
||||||
@ -57,7 +62,12 @@ function inetChecksite(url, callback) {
|
|||||||
result.url = urlSanitized;
|
result.url = urlSanitized;
|
||||||
try {
|
try {
|
||||||
if (urlSanitized && !util.isPrototypePolluted()) {
|
if (urlSanitized && !util.isPrototypePolluted()) {
|
||||||
|
try {
|
||||||
urlSanitized.__proto__.startsWith = util.stringStartWith;
|
urlSanitized.__proto__.startsWith = util.stringStartWith;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(urlSanitized, util.stringObj);
|
||||||
|
}
|
||||||
|
|
||||||
if (urlSanitized.startsWith('file:') || urlSanitized.startsWith('gopher:') || urlSanitized.startsWith('telnet:') || urlSanitized.startsWith('mailto:') || urlSanitized.startsWith('news:') || urlSanitized.startsWith('nntp:')) {
|
if (urlSanitized.startsWith('file:') || urlSanitized.startsWith('gopher:') || urlSanitized.startsWith('telnet:') || urlSanitized.startsWith('mailto:') || urlSanitized.startsWith('news:') || urlSanitized.startsWith('nntp:')) {
|
||||||
if (callback) { callback(result); }
|
if (callback) { callback(result); }
|
||||||
return resolve(result);
|
return resolve(result);
|
||||||
@ -108,14 +118,24 @@ function inetLatency(host, callback) {
|
|||||||
const l = util.mathMin(s.length, 2000);
|
const l = util.mathMin(s.length, 2000);
|
||||||
for (let i = 0; i <= l; i++) {
|
for (let i = 0; i <= l; i++) {
|
||||||
if (!(s[i] === undefined)) {
|
if (!(s[i] === undefined)) {
|
||||||
|
try {
|
||||||
s[i].__proto__.toLowerCase = util.stringToLower;
|
s[i].__proto__.toLowerCase = util.stringToLower;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(s[i], util.stringObj);
|
||||||
|
}
|
||||||
|
|
||||||
const sl = s[i].toLowerCase();
|
const sl = s[i].toLowerCase();
|
||||||
if (sl && sl[0] && !sl[1]) {
|
if (sl && sl[0] && !sl[1]) {
|
||||||
hostSanitized = hostSanitized + sl[0];
|
hostSanitized = hostSanitized + sl[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
hostSanitized.__proto__.startsWith = util.stringStartWith;
|
hostSanitized.__proto__.startsWith = util.stringStartWith;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(hostSanitized, util.stringObj);
|
||||||
|
}
|
||||||
|
|
||||||
if (hostSanitized.startsWith('file:') || hostSanitized.startsWith('gopher:') || hostSanitized.startsWith('telnet:') || hostSanitized.startsWith('mailto:') || hostSanitized.startsWith('news:') || hostSanitized.startsWith('nntp:')) {
|
if (hostSanitized.startsWith('file:') || hostSanitized.startsWith('gopher:') || hostSanitized.startsWith('telnet:') || hostSanitized.startsWith('mailto:') || hostSanitized.startsWith('news:') || hostSanitized.startsWith('nntp:')) {
|
||||||
if (callback) { callback(null); }
|
if (callback) { callback(null); }
|
||||||
return resolve(null);
|
return resolve(null);
|
||||||
|
|||||||
@ -1174,9 +1174,13 @@ function networkStats(ifaces, callback) {
|
|||||||
}
|
}
|
||||||
ifaces = ifaces || getDefaultNetworkInterface();
|
ifaces = ifaces || getDefaultNetworkInterface();
|
||||||
|
|
||||||
|
try {
|
||||||
ifaces.__proto__.toLowerCase = util.stringToLower;
|
ifaces.__proto__.toLowerCase = util.stringToLower;
|
||||||
ifaces.__proto__.replace = util.stringReplace;
|
ifaces.__proto__.replace = util.stringReplace;
|
||||||
ifaces.__proto__.trim = util.stringTrim;
|
ifaces.__proto__.trim = util.stringTrim;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(ifaces, util.stringObj);
|
||||||
|
}
|
||||||
|
|
||||||
ifaces = ifaces.trim().toLowerCase().replace(/,+/g, '|');
|
ifaces = ifaces.trim().toLowerCase().replace(/,+/g, '|');
|
||||||
ifacesArray = ifaces.split('|');
|
ifacesArray = ifaces.split('|');
|
||||||
|
|||||||
@ -126,9 +126,13 @@ function services(srv, callback) {
|
|||||||
|
|
||||||
if (srv) {
|
if (srv) {
|
||||||
let srvString = '';
|
let srvString = '';
|
||||||
|
try {
|
||||||
srvString.__proto__.toLowerCase = util.stringToLower;
|
srvString.__proto__.toLowerCase = util.stringToLower;
|
||||||
srvString.__proto__.replace = util.stringReplace;
|
srvString.__proto__.replace = util.stringReplace;
|
||||||
srvString.__proto__.trim = util.stringTrim;
|
srvString.__proto__.trim = util.stringTrim;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(srvString, util.stringObj);
|
||||||
|
}
|
||||||
|
|
||||||
const s = util.sanitizeShellString(srv);
|
const s = util.sanitizeShellString(srv);
|
||||||
const l = util.mathMin(s.length, 2000);
|
const l = util.mathMin(s.length, 2000);
|
||||||
@ -982,9 +986,13 @@ function processLoad(proc, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let processesString = '';
|
let processesString = '';
|
||||||
|
try {
|
||||||
processesString.__proto__.toLowerCase = util.stringToLower;
|
processesString.__proto__.toLowerCase = util.stringToLower;
|
||||||
processesString.__proto__.replace = util.stringReplace;
|
processesString.__proto__.replace = util.stringReplace;
|
||||||
processesString.__proto__.trim = util.stringTrim;
|
processesString.__proto__.trim = util.stringTrim;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(processesString, util.stringObj);
|
||||||
|
}
|
||||||
|
|
||||||
const s = util.sanitizeShellString(proc);
|
const s = util.sanitizeShellString(proc);
|
||||||
const l = util.mathMin(s.length, 2000);
|
const l = util.mathMin(s.length, 2000);
|
||||||
|
|||||||
15
lib/util.js
15
lib/util.js
@ -84,6 +84,7 @@ function splitByNumber(str) {
|
|||||||
return [cpart, num];
|
return [cpart, num];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const stringObj = new String();
|
||||||
const stringReplace = new String().replace;
|
const stringReplace = new String().replace;
|
||||||
const stringToLower = new String().toLowerCase;
|
const stringToLower = new String().toLowerCase;
|
||||||
const stringToString = new String().toString;
|
const stringToString = new String().toString;
|
||||||
@ -758,11 +759,14 @@ function isPrototypePolluted() {
|
|||||||
let notPolluted = true;
|
let notPolluted = true;
|
||||||
let st = '';
|
let st = '';
|
||||||
|
|
||||||
|
try {
|
||||||
st.__proto__.replace = stringReplace;
|
st.__proto__.replace = stringReplace;
|
||||||
st.__proto__.toLowerCase = stringToLower;
|
st.__proto__.toLowerCase = stringToLower;
|
||||||
st.__proto__.toString = stringToString;
|
st.__proto__.toString = stringToString;
|
||||||
st.__proto__.substr = stringSubstr;
|
st.__proto__.substr = stringSubstr;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(st, stringObj);
|
||||||
|
}
|
||||||
notPolluted = notPolluted || (s.length !== 62);
|
notPolluted = notPolluted || (s.length !== 62);
|
||||||
const ms = Date.now();
|
const ms = Date.now();
|
||||||
if (typeof ms === 'number' && ms > 1600000000000) {
|
if (typeof ms === 'number' && ms > 1600000000000) {
|
||||||
@ -782,7 +786,11 @@ function isPrototypePolluted() {
|
|||||||
// string manipulation
|
// string manipulation
|
||||||
let p = Math.random() * l * 0.9999999999;
|
let p = Math.random() * l * 0.9999999999;
|
||||||
let stm = st.substr(0, p) + ' ' + st.substr(p, 2000);
|
let stm = st.substr(0, p) + ' ' + st.substr(p, 2000);
|
||||||
|
try {
|
||||||
stm.__proto__.replace = stringReplace;
|
stm.__proto__.replace = stringReplace;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(stm, stringObj);
|
||||||
|
}
|
||||||
let sto = stm.replace(/ /g, '');
|
let sto = stm.replace(/ /g, '');
|
||||||
notPolluted = notPolluted && st === sto;
|
notPolluted = notPolluted && st === sto;
|
||||||
p = Math.random() * l * 0.9999999999;
|
p = Math.random() * l * 0.9999999999;
|
||||||
@ -803,7 +811,11 @@ function isPrototypePolluted() {
|
|||||||
notPolluted = notPolluted && (stl.length === l) && stl[l - 1] && !(stl[l]);
|
notPolluted = notPolluted && (stl.length === l) && stl[l - 1] && !(stl[l]);
|
||||||
for (let i = 0; i < l; i++) {
|
for (let i = 0; i < l; i++) {
|
||||||
const s1 = st[i];
|
const s1 = st[i];
|
||||||
|
try {
|
||||||
s1.__proto__.toLowerCase = stringToLower;
|
s1.__proto__.toLowerCase = stringToLower;
|
||||||
|
} catch (e) {
|
||||||
|
Object.setPrototypeOf(st, stringObj);
|
||||||
|
}
|
||||||
const s2 = stl ? stl[i] : '';
|
const s2 = stl ? stl[i] : '';
|
||||||
const s1l = s1.toLowerCase();
|
const s1l = s1.toLowerCase();
|
||||||
notPolluted = notPolluted && s1l[0] === s2 && s1l[0] && !(s1l[1]);
|
notPolluted = notPolluted && s1l[0] === s2 && s1l[0] && !(s1l[1]);
|
||||||
@ -2561,6 +2573,7 @@ exports.smartMonToolsInstalled = smartMonToolsInstalled;
|
|||||||
exports.linuxVersion = linuxVersion;
|
exports.linuxVersion = linuxVersion;
|
||||||
exports.plistParser = plistParser;
|
exports.plistParser = plistParser;
|
||||||
exports.plistReader = plistReader;
|
exports.plistReader = plistReader;
|
||||||
|
exports.stringObj = stringObj;
|
||||||
exports.stringReplace = stringReplace;
|
exports.stringReplace = stringReplace;
|
||||||
exports.stringToLower = stringToLower;
|
exports.stringToLower = stringToLower;
|
||||||
exports.stringToString = stringToString;
|
exports.stringToString = stringToString;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user