From 3cab714b717b52f0e194b7f8f7976ef5ba862954 Mon Sep 17 00:00:00 2001 From: Michael Hollister Date: Fri, 20 Jun 2025 11:54:35 -0500 Subject: [PATCH] Receivers: Fix mdns internal buffer overflow error and advertisement crash --- receivers/common/web/DiscoveryService.ts | 20 ++++-- receivers/electron/package-lock.json | 84 ++++++++++++------------ receivers/electron/package.json | 2 +- 3 files changed, 58 insertions(+), 48 deletions(-) diff --git a/receivers/common/web/DiscoveryService.ts b/receivers/common/web/DiscoveryService.ts index 0fd2bcb..10cecb1 100644 --- a/receivers/common/web/DiscoveryService.ts +++ b/receivers/common/web/DiscoveryService.ts @@ -1,6 +1,7 @@ -import mdns from 'modules/mdns-js'; +import mdns from 'modules/@futo/mdns-js'; import { Logger, LoggerType } from 'common/Logger'; -import { getComputerName } from 'src/Main'; +import { getAppName, getAppVersion, getComputerName } from 'src/Main'; +import { PROTOCOL_VERSION } from 'common/Packets'; const logger = new Logger('DiscoveryService', LoggerType.BACKEND); export class DiscoveryService { @@ -16,10 +17,19 @@ export class DiscoveryService { logger.info(`Discovery service started: ${name}`); // Note that txt field must be populated, otherwise certain mdns stacks have undefined behavior/issues - // when connecting to the receiver - this.serviceTcp = mdns.createAdvertisement(mdns.tcp('_fcast'), 46899, { name: name, txt: {} }); + // when connecting to the receiver. Also mdns-js internally gets a lot of parsing errors when txt records + // are not defined. + this.serviceTcp = mdns.createAdvertisement(mdns.tcp('_fcast'), 46899, { name: name, txt: { + version: PROTOCOL_VERSION, + appName: getAppName(), + appVersion: getAppVersion(), + } }); this.serviceTcp.start(); - this.serviceWs = mdns.createAdvertisement(mdns.tcp('_fcast-ws'), 46898, { name: name, txt: {} }); + this.serviceWs = mdns.createAdvertisement(mdns.tcp('_fcast-ws'), 46898, { name: name, txt: { + version: PROTOCOL_VERSION, + appName: getAppName(), + appVersion: getAppVersion(), + } }); this.serviceWs.start(); } diff --git a/receivers/electron/package-lock.json b/receivers/electron/package-lock.json index fae8764..5d226de 100644 --- a/receivers/electron/package-lock.json +++ b/receivers/electron/package-lock.json @@ -36,6 +36,7 @@ "@electron/fuses": "^1.8.0", "@eslint/js": "^9.25.0", "@futo/forge-maker-wix-linux": "^7.5.0", + "@futo/mdns-js": "1.0.3", "@types/electron-json-storage": "^4.5.4", "@types/jest": "^29.5.11", "@types/mdns": "^0.0.38", @@ -49,7 +50,6 @@ "eslint": "^9.25.0", "globals": "^16.0.0", "jest": "^29.7.0", - "mdns-js": "github:mdns-js/node-mdns-js", "ts-jest": "^29.1.1", "ts-loader": "^9.4.2", "typescript": "^5.5.4", @@ -1644,6 +1644,47 @@ "node": ">= 14.17.5" } }, + "node_modules/@futo/mdns-js": { + "version": "1.0.3", + "resolved": "https://gitlab.futo.org/api/v4/projects/305/packages/npm/@futo/mdns-js/-/@futo/mdns-js-1.0.3.tgz", + "integrity": "sha1-y25rzWUSYkRu0bhkR472LJLMdcc=", + "dev": true, + "dependencies": { + "debug": "~3.1.0", + "dns-js": "~0.2.1", + "semver": "~5.4.1" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@futo/mdns-js/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@futo/mdns-js/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@futo/mdns-js/node_modules/semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -8677,47 +8718,6 @@ "node": ">= 0.4" } }, - "node_modules/mdns-js": { - "version": "1.0.3", - "resolved": "git+ssh://git@github.com/mdns-js/node-mdns-js.git#4fb9220ec8852bae9e2781917f649821b9df539d", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "~3.1.0", - "dns-js": "~0.2.1", - "semver": "~5.4.1" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/mdns-js/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mdns-js/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/mdns-js/node_modules/semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/mem": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", diff --git a/receivers/electron/package.json b/receivers/electron/package.json index 55a8bd1..b7a4f03 100644 --- a/receivers/electron/package.json +++ b/receivers/electron/package.json @@ -37,7 +37,7 @@ "eslint": "^9.25.0", "globals": "^16.0.0", "jest": "^29.7.0", - "mdns-js": "github:mdns-js/node-mdns-js", + "@futo/mdns-js": "1.0.3", "ts-jest": "^29.1.1", "ts-loader": "^9.4.2", "typescript": "^5.5.4",