1
0
Fork 0
mirror of https://github.com/actions/upload-artifact synced 2024-12-22 06:22:45 +00:00

Correctly check symlinks (#103)

This commit is contained in:
Konrad Pabjan 2020-07-27 15:41:16 +02:00 committed by GitHub
parent 589ca5fbdd
commit 5f948bc1f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 3 deletions

6
dist/index.js vendored
View file

@ -6225,6 +6225,8 @@ const path = __importStar(__webpack_require__(622));
const core_1 = __webpack_require__(470); const core_1 = __webpack_require__(470);
const fs_1 = __webpack_require__(747); const fs_1 = __webpack_require__(747);
const path_1 = __webpack_require__(622); const path_1 = __webpack_require__(622);
const util_1 = __webpack_require__(669);
const stats = util_1.promisify(fs_1.stat);
function getDefaultGlobOptions() { function getDefaultGlobOptions() {
return { return {
followSymbolicLinks: true, followSymbolicLinks: true,
@ -6293,7 +6295,9 @@ function findFilesToUpload(searchPath, globOptions) {
directories so filter any directories out from the raw search results directories so filter any directories out from the raw search results
*/ */
for (const searchResult of rawSearchResults) { for (const searchResult of rawSearchResults) {
if (!fs_1.lstatSync(searchResult).isDirectory()) { const fileStats = yield stats(searchResult);
// isDirectory() returns false for symlinks if using fs.lstat(), make sure to use fs.stat() instead
if (!fileStats.isDirectory()) {
core_1.debug(`File:${searchResult} was found using the provided searchPath`); core_1.debug(`File:${searchResult} was found using the provided searchPath`);
searchResults.push(searchResult); searchResults.push(searchResult);
} }

View file

@ -1,8 +1,10 @@
import * as glob from '@actions/glob' import * as glob from '@actions/glob'
import * as path from 'path' import * as path from 'path'
import {debug, info} from '@actions/core' import {debug, info} from '@actions/core'
import {lstatSync} from 'fs' import {stat} from 'fs'
import {dirname} from 'path' import {dirname} from 'path'
import {promisify} from 'util'
const stats = promisify(stat)
export interface SearchResult { export interface SearchResult {
filesToUpload: string[] filesToUpload: string[]
@ -92,7 +94,9 @@ export async function findFilesToUpload(
directories so filter any directories out from the raw search results directories so filter any directories out from the raw search results
*/ */
for (const searchResult of rawSearchResults) { for (const searchResult of rawSearchResults) {
if (!lstatSync(searchResult).isDirectory()) { const fileStats = await stats(searchResult)
// isDirectory() returns false for symlinks if using fs.lstat(), make sure to use fs.stat() instead
if (!fileStats.isDirectory()) {
debug(`File:${searchResult} was found using the provided searchPath`) debug(`File:${searchResult} was found using the provided searchPath`)
searchResults.push(searchResult) searchResults.push(searchResult)
} else { } else {