提交 cdc279c5 编写于 作者: B Benjamin Pasero

files - protect against null errors

上级 b6e89136
......@@ -288,7 +288,12 @@ export function markAsFileSystemProviderError(error: Error, code: FileSystemProv
return error;
}
export function toFileSystemProviderErrorCode(error: Error): FileSystemProviderErrorCode {
export function toFileSystemProviderErrorCode(error: Error | undefined | null): FileSystemProviderErrorCode {
// Guard against abuse
if (!error) {
return FileSystemProviderErrorCode.Unknown;
}
// FileSystemProviderError comes with the code
if (error instanceof FileSystemProviderError) {
......
......@@ -157,7 +157,7 @@ export class FileService extends Disposable implements IFileService {
}
// Bubble up any other error as is
throw error;
throw this.ensureError(error);
}
}
......@@ -306,7 +306,7 @@ export class FileService extends Disposable implements IFileService {
await this.doWriteUnbuffered(provider, resource, bufferOrReadable);
}
} catch (error) {
throw new FileOperationError(localize('err.write', "Unable to write file ({0})", error.toString()), toFileOperationResult(error), options);
throw new FileOperationError(localize('err.write', "Unable to write file ({0})", this.ensureError(error).toString()), toFileOperationResult(error), options);
}
return this.resolve(resource, { resolveMetadata: true });
......@@ -401,7 +401,7 @@ export class FileService extends Disposable implements IFileService {
value: fileStream
};
} catch (error) {
throw new FileOperationError(localize('err.read', "Unable to read file ({0})", error.toString()), toFileOperationResult(error), options);
throw new FileOperationError(localize('err.read', "Unable to read file ({0})", this.ensureError(error).toString()), toFileOperationResult(error), options);
}
}
......@@ -465,7 +465,7 @@ export class FileService extends Disposable implements IFileService {
stream.write(buffer.slice(0, lastChunkLength));
}
} catch (error) {
throw error;
throw this.ensureError(error);
} finally {
await provider.close(handle);
}
......@@ -866,7 +866,7 @@ export class FileService extends Disposable implements IFileService {
posInFile += chunk.byteLength;
}
} catch (error) {
throw error;
throw this.ensureError(error);
} finally {
await provider.close(handle);
}
......@@ -932,7 +932,7 @@ export class FileService extends Disposable implements IFileService {
}
} while (bytesRead > 0);
} catch (error) {
throw error;
throw this.ensureError(error);
} finally {
await Promise.all([
typeof sourceHandle === 'number' ? sourceProvider.close(sourceHandle) : Promise.resolve(),
......@@ -963,7 +963,7 @@ export class FileService extends Disposable implements IFileService {
const buffer = await sourceProvider.readFile(source);
await this.doWriteBuffer(targetProvider, targetHandle, VSBuffer.wrap(buffer), buffer.byteLength, 0, 0);
} catch (error) {
throw error;
throw this.ensureError(error);
} finally {
await targetProvider.close(targetHandle);
}
......@@ -994,6 +994,14 @@ export class FileService extends Disposable implements IFileService {
return true;
}
private ensureError(error?: Error): Error {
if (!error) {
return new Error(localize('unknownError', "Unknown Error")); // https://github.com/Microsoft/vscode/issues/72798
}
return error;
}
private throwIfTooLarge(totalBytesRead: number, options?: IReadFileOptions): boolean {
// Return early if file is too large to load
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册