Skip to content

Commit 0a31574

Browse files
Merge pull request #385 from RomanBurunkov/master
Add process id to the temp files name
2 parents 2eeda16 + 3fcd029 commit 0a31574

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

lib/utilities.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const fs = require('fs');
44
const path = require('path');
55
const crypto = require('crypto');
66
const { Readable } = require('stream');
7+
const process = require('process');
78

89
// Parameters for safe file name parsing.
910
const SAFE_FILE_NAME_REGEX = /[^\w-]/g;
@@ -29,12 +30,12 @@ const debugLog = (options, msg) => {
2930

3031
/**
3132
* Generates unique temporary file name. e.g. tmp-5000-156788789789.
32-
* @param {string} prefix - a prefix for generated unique file name.
33+
* @param {string} [prefix] - Optional prefix for generated unique file name.
3334
* @returns {string}
3435
*/
35-
const getTempFilename = (prefix = TEMP_PREFIX) => {
36+
const getTempFilename = (prefix) => {
3637
tempCounter = tempCounter >= TEMP_COUNTER_MAX ? 1 : tempCounter + 1;
37-
return `${prefix}-${tempCounter}-${Date.now()}`;
38+
return `${prefix || TEMP_PREFIX}-${tempCounter}-${process.pid}${Date.now()}`;
3839
};
3940

4041
/**

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "express-fileupload",
3-
"version": "1.5.1",
3+
"version": "1.5.2",
44
"author": "Richard Girges <[email protected]>",
55
"description": "Simple express file upload middleware that wraps around Busboy",
66
"main": "./lib/index",

test/tempFile.spec.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,17 @@ const path = require('path');
44
const request = require('supertest');
55
const server = require('./server');
66
const assert = require('assert');
7+
const process = require('process');
78

89
const clearUploadsDir = server.clearUploadsDir;
910
const fileDir = server.fileDir;
1011
const uploadDir = server.uploadDir;
1112

13+
const tempFileDir = '/tmp/';
14+
15+
/** Default permissions different for win32 and linux systems */
16+
const defaultFilePermissions = process.platform === 'win32' ? 0o666 : 0o644;
17+
1218
describe('tempFile: Test fileupload w/ useTempFiles.', function() {
1319
afterEach(function(done) {
1420
clearUploadsDir();
@@ -26,7 +32,7 @@ describe('tempFile: Test fileupload w/ useTempFiles.', function() {
2632
actualFileNameToUpload,
2733
expectedFileNameOnFileSystem,
2834
done,
29-
expectedFilePermissions = 0o644
35+
expectedFilePermissions = defaultFilePermissions
3036
) {
3137

3238
let filePath = path.join(fileDir, actualFileNameToUpload);
@@ -69,7 +75,7 @@ describe('tempFile: Test fileupload w/ useTempFiles.', function() {
6975
const fileUploadOptions = {
7076
safeFileNames: false,
7177
useTempFiles: true,
72-
tempFileDir: '/tmp/'
78+
tempFileDir
7379
};
7480
const actualFileName = 'my$Invalid#fileName.png123';
7581
const expectedFileName = 'my$Invalid#fileName.png123';
@@ -83,7 +89,7 @@ describe('tempFile: Test fileupload w/ useTempFiles.', function() {
8389
it('Is disabled by default.', function(done) {
8490
const fileUploadOptions = {
8591
useTempFiles: true,
86-
tempFileDir: '/tmp/'
92+
tempFileDir
8793
};
8894
const actualFileName = 'my$Invalid#fileName.png123';
8995
const expectedFileName = 'my$Invalid#fileName.png123';
@@ -101,7 +107,7 @@ describe('tempFile: Test fileupload w/ useTempFiles.', function() {
101107
const fileUploadOptions = {
102108
safeFileNames: true,
103109
useTempFiles: true,
104-
tempFileDir: '/tmp/'
110+
tempFileDir
105111
};
106112
const actualFileName = 'my$Invalid#fileName.png123';
107113
const expectedFileName = 'myInvalidfileNamepng123';
@@ -119,7 +125,7 @@ describe('tempFile: Test fileupload w/ useTempFiles.', function() {
119125
const fileUploadOptions = {
120126
safeFileNames: /[$#]/g,
121127
useTempFiles: true,
122-
tempFileDir: '/tmp/'
128+
tempFileDir
123129
};
124130
const actualFileName = 'my$Invalid#fileName.png123';
125131
const expectedFileName = 'myInvalidfileName.png123';
@@ -136,7 +142,7 @@ describe('tempFile: Test fileupload w/ useTempFiles.', function() {
136142
const fileUploadOptions = {
137143
safeFileNames: false,
138144
useTempFiles: true,
139-
tempFileDir: '/tmp/',
145+
tempFileDir,
140146
tempFilePermissions: 0o666
141147
};
142148
const actualFileName = 'my$Invalid#fileName.png123';
@@ -151,7 +157,7 @@ describe('tempFile: Test fileupload w/ useTempFiles.', function() {
151157
it('Respects option boundaries when provided.', function(done) {
152158
const fileUploadOptions = {
153159
useTempFiles: true,
154-
tempFileDir: '/tmp/',
160+
tempFileDir,
155161
tempFilePermissions: 0o7777
156162
};
157163
const expressFileupload = require('../lib/index');
@@ -163,17 +169,20 @@ describe('tempFile: Test fileupload w/ useTempFiles.', function() {
163169
it('Applies permissions in filesystem.', function(done) {
164170
const fileUploadOptions = {
165171
useTempFiles: true,
166-
tempFileDir: '/tmp/',
172+
tempFileDir,
167173
tempFilePermissions: 0o600
168174
};
169175
const actualFileName = 'my$Invalid#fileName.png123';
170176
const expectedFileName = 'my$Invalid#fileName.png123';
177+
// Expected file perms after moving it to the destination folder depends on the platform.
178+
const expectedFilePermissions = process.platform === 'win32' ? 0o666 : 0o600;
179+
171180
executeFileUploadTestWalk(
172181
fileUploadOptions,
173182
actualFileName,
174183
expectedFileName,
175184
done,
176-
0o600
185+
expectedFilePermissions
177186
);
178187
});
179188
});

0 commit comments

Comments
 (0)