Skip to content

Commit 0182c4b

Browse files
fix: Ignore symbolic links in data during backup (#28132)
Co-authored-by: Nerivec <[email protected]>
1 parent c12f07c commit 0182c4b

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

lib/util/utils.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,14 +202,21 @@ function containsControlCharacter(str: string): boolean {
202202

203203
function getAllFiles(path_: string): string[] {
204204
const result = [];
205-
for (let item of fs.readdirSync(path_)) {
206-
item = path.join(path_, item);
207-
if (fs.lstatSync(item).isFile()) {
208-
result.push(item);
205+
206+
for (const item of fs.readdirSync(path_, {withFileTypes: true})) {
207+
if (item.isSymbolicLink()) {
208+
continue;
209+
}
210+
211+
const fileName = path.join(path_, item.name);
212+
213+
if (fs.lstatSync(fileName).isFile()) {
214+
result.push(fileName);
209215
} else {
210-
result.push(...getAllFiles(item));
216+
result.push(...getAllFiles(fileName));
211217
}
212218
}
219+
213220
return result;
214221
}
215222

test/extensions/bridge.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {CUSTOM_CLUSTERS, devices, groups, mockController as mockZHController, ev
99

1010
import assert from "node:assert";
1111
import fs from "node:fs";
12+
import {platform} from "node:os";
1213
import path from "node:path";
1314
import stringify from "json-stable-stringify-without-jsonify";
1415
import type {Mock} from "vitest";
@@ -3841,6 +3842,11 @@ describe("Extension: Bridge", () => {
38413842
fs.writeFileSync(path.join(data.mockDir, "log", "log.log"), "test123");
38423843
fs.mkdirSync(path.join(data.mockDir, "ext_converters", "123"));
38433844
fs.writeFileSync(path.join(data.mockDir, "ext_converters", "123", "myfile.js"), "test123");
3845+
fs.symlinkSync(
3846+
path.join(data.mockDir, "ext_converters"),
3847+
path.join(data.mockDir, "ext_converters_sym"),
3848+
platform() === "win32" ? "junction" : "dir",
3849+
);
38443850
mockMQTTPublishAsync.mockClear();
38453851
mockMQTTEvents.message("zigbee2mqtt/bridge/request/backup", "");
38463852
await flushPromises();

0 commit comments

Comments
 (0)