Safely handle files and directories when building

This commit is contained in:
Tony Bark 2025-05-07 12:19:34 -04:00
parent a3d060735f
commit eb5539f45f

View file

@ -15,20 +15,23 @@ public class BuildCommand : ICommand
public async ValueTask ExecuteAsync(IConsole console) public async ValueTask ExecuteAsync(IConsole console)
{ {
var file = new FileInfo(FilePath); var fileInfo = new FileInfo(FilePath);
var file = fileInfo.FullName;
var dir = Path.GetDirectoryName(FilePath);
var path = Path.Combine(dir, file);
if (!File.Exists(FilePath)) if (!File.Exists(FilePath))
{ {
await console.Error.WriteLineAsync($"Error: File not found: {FilePath}"); await console.Error.WriteLineAsync($"Error: File not found: {file}");
return; return;
} }
;
var lines = await File.ReadAllLinesAsync(FilePath); var lines = await File.ReadAllLinesAsync(path);
var source = ScriptHelper.LinesToString(lines); var source = ScriptHelper.LinesToString(lines);
if (Verbose) if (Verbose)
{ {
await console.Output.WriteLineAsync($"Compiling: {FilePath}"); await console.Output.WriteLineAsync($"Compiling: {path}");
} }
var counter = ScriptHelper.CharacterCounter(1259, source); var counter = ScriptHelper.CharacterCounter(1259, source);
@ -36,15 +39,21 @@ public class BuildCommand : ICommand
if (counter.checker) if (counter.checker)
await console.Output.WriteAsync(counter.output); await console.Output.WriteAsync(counter.output);
if (DryRun)
return;
var qrGenerator = new QRCodeGenerator(); var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(source, QRCodeGenerator.ECCLevel.H); var qrCodeData = qrGenerator.CreateQrCode(source, QRCodeGenerator.ECCLevel.H);
var qrCode = new SvgQRCode(qrCodeData); var qrCode = new SvgQRCode(qrCodeData);
var qrCodeAsSvg = qrCode.GetGraphic(57); var qrCodeAsSvg = qrCode.GetGraphic(57);
var path = Path.GetDirectoryName(FilePath);
var srcName = Path.GetFileNameWithoutExtension(file.Name); if (string.IsNullOrEmpty(qrCodeAsSvg))
File.WriteAllText(Path.Combine(path, $"{srcName}.svg"), qrCodeAsSvg); return;
await console.Output.WriteLineAsync("Rendered successfully.");
if (DryRun)
return;
var srcName = Path.GetFileNameWithoutExtension(fileInfo.Name);
File.WriteAllText(Path.Combine(dir, $"{srcName}.svg"), qrCodeAsSvg);
} }
} }