Skip to content

Commit e04aa61

Browse files
authored
v1.3.1 - Release
### Security - **Bumped `immutable` 5.1.6 -> 5.1.9** to clear two high-severity denial-of-service advisories (GHSA-v56q-mh7h-f735, GHSA-xvcm-6775-5m9r). `immutable` is a transitive **dev** dependency pulled in by `sass` and only runs during the build, never in the shipped app - so the advisories were not exploitable against users - but this clears the alerts. ### Changed - **Relicensed from PolyForm Noncommercial 1.0.0 to MIT + Commons Clause.** PolyForm NC barred all commercial use, including a company running NetGraph on its own internal network. The new terms allow use (companies included), modification, and free redistribution, and forbid only selling the software (per the Commons Clause). Updated `LICENSE`, `package.json`, the README badge and license note, and CONTRIBUTING. - **Updated dependencies** - `lucide-static` 1.24.0 -> 1.26.0 (Lucide icon set), plus build and CI tooling (`happy-dom`, `sass`, `actions/checkout`).
2 parents cb25fec + ad1e8e7 commit e04aa61

5 files changed

Lines changed: 34 additions & 12 deletions

File tree

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,13 @@ repomix-output.*
100100
private/
101101
# Deploy script - holds server/target details, never shipped.
102102
/scripts/deploy.sh
103+
104+
# --- Syncthing artifacts -------------------------------------
105+
# The whole Khemul folder is synced between machines via Syncthing; never track
106+
# its housekeeping files or conflict copies.
107+
.stfolder/
108+
.stignore
109+
.stversions/
110+
.syncthing.*.tmp
111+
~syncthing~*.tmp
112+
*.sync-conflict-*

CHANGELOG.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [1.3.1] - 2026-07-24
11+
12+
### Security
13+
14+
- **Bumped `immutable` 5.1.6 -> 5.1.9** to clear two high-severity
15+
denial-of-service advisories (GHSA-v56q-mh7h-f735, GHSA-xvcm-6775-5m9r).
16+
`immutable` is a transitive **dev** dependency pulled in by `sass` and only
17+
runs during the build, never in the shipped app - so the advisories were not
18+
exploitable against users - but this clears the alerts.
19+
1020
### Changed
1121

1222
- **Relicensed from PolyForm Noncommercial 1.0.0 to MIT + Commons Clause.**
@@ -15,6 +25,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1525
modification, and free redistribution, and forbid only selling the software
1626
(per the Commons Clause). Updated `LICENSE`, `package.json`, the README badge
1727
and license note, and CONTRIBUTING.
28+
- **Updated dependencies** - `lucide-static` 1.24.0 -> 1.26.0 (Lucide icon set),
29+
plus build and CI tooling (`happy-dom`, `sass`, `actions/checkout`).
1830

1931
## [1.3.0] - 2026-06-25
2032

@@ -56,5 +68,6 @@ describes the app as it stands at that release.
5668
- **Touch support** - drag to pan, pinch to zoom, and long-press for context
5769
menus on tablets.
5870

59-
[Unreleased]: https://github.com/BrainInBlack/NetGraph/compare/v1.3.0...HEAD
71+
[Unreleased]: https://github.com/BrainInBlack/NetGraph/compare/v1.3.1...HEAD
72+
[1.3.1]: https://github.com/BrainInBlack/NetGraph/compare/v1.3.0...v1.3.1
6073
[1.3.0]: https://github.com/BrainInBlack/NetGraph/releases/tag/v1.3.0

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "netgraph",
33
"private": true,
4-
"version": "1.3.0",
4+
"version": "1.3.1",
55
"description": "Browser-based local network visualizer - map your home or lab network, stored entirely in localStorage with no backend.",
66
"license": "SEE LICENSE IN LICENSE",
77
"author": "BrainInBlack <braininblack@gmail.com>",

src/ts/svg-sanitizer.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,13 @@ export const MAX_SVG_LENGTH = 64 * 1024;
3636
export function sanitizeSvg(text: string): string | null {
3737
if (text.length > MAX_SVG_LENGTH) return null;
3838

39-
// CodeQL flags this parse as `js/xss-through-dom` ("DOM text reinterpreted as
40-
// HTML"). It is a false positive: this is the sanitizer's own entry point.
41-
// The untrusted string is parsed here, then the tree is scrubbed against an
42-
// allow-list of tags and attributes and walked over all child nodes (dropping
43-
// CDATA, comments, and processing instructions, see the mXSS note below)
44-
// before `root.outerHTML` is returned. Nothing reaches the DOM unsanitized.
45-
// The alert is dismissed as a false positive in GitHub code scanning; keep
46-
// this comment so the reasoning is visible at the source.
39+
// A static analyzer may flag this parse as DOM-based XSS ("DOM text
40+
// reinterpreted as HTML"). It is a false positive: this is the sanitizer's own
41+
// entry point. The untrusted string is parsed here, then the tree is scrubbed
42+
// against an allow-list of tags and attributes and walked over all child nodes
43+
// (dropping CDATA, comments, and processing instructions, see the mXSS note
44+
// below) before `root.outerHTML` is returned. Nothing reaches the DOM
45+
// unsanitized.
4746
const doc = new DOMParser().parseFromString(text, 'image/svg+xml');
4847
const root = doc.querySelector('svg');
4948
if (!root || doc.querySelector('parsererror')) return null;

0 commit comments

Comments
 (0)