fix(author): sanitize output filenames at job creation time
Added explicit sanitization of output paths when creating authoring jobs to ensure special characters are removed before any filesystem operations. The sanitization now happens in two places: 1. addAuthorToQueue: Sanitizes the output path for regular authoring jobs 2. addAuthorVideoTSToQueue: Sanitizes the output path for VIDEO_TS->ISO jobs This ensures that: - OutputFile field in Job struct never contains special characters - Log filenames are sanitized (using the OutputFile basename) - All filesystem operations use clean filenames Before: /path/ifuckedmybestfriend'sgirlfriend.iso After: /path/ifuckedmybestfriendsgirlfriend.iso The display title shown to users still contains the original text, but all actual file operations use sanitized names. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
df1f02b44a
commit
f655c0199d
|
|
@ -2372,12 +2372,25 @@ func (s *appState) addAuthorToQueue(paths []string, region, aspect, title, outpu
|
|||
if strings.TrimSpace(titleLabel) == "" {
|
||||
titleLabel = "DVD"
|
||||
}
|
||||
|
||||
// Sanitize output path to ensure no special characters in filesystem operations
|
||||
sanitizedOutputPath := outputPath
|
||||
dir := filepath.Dir(outputPath)
|
||||
base := filepath.Base(outputPath)
|
||||
ext := filepath.Ext(base)
|
||||
nameWithoutExt := strings.TrimSuffix(base, ext)
|
||||
sanitizedName := sanitizeForPath(nameWithoutExt)
|
||||
if sanitizedName == "" {
|
||||
sanitizedName = "dvd_output"
|
||||
}
|
||||
sanitizedOutputPath = filepath.Join(dir, sanitizedName+ext)
|
||||
|
||||
job := &queue.Job{
|
||||
Type: queue.JobTypeAuthor,
|
||||
Title: fmt.Sprintf("Author DVD: %s", titleLabel),
|
||||
Description: fmt.Sprintf("Output: %s", utils.ShortenMiddle(filepath.Base(outputPath), 40)),
|
||||
Description: fmt.Sprintf("Output: %s", utils.ShortenMiddle(filepath.Base(sanitizedOutputPath), 40)),
|
||||
InputFile: paths[0],
|
||||
OutputFile: outputPath,
|
||||
OutputFile: sanitizedOutputPath,
|
||||
Config: config,
|
||||
}
|
||||
|
||||
|
|
@ -2399,15 +2412,28 @@ func (s *appState) addAuthorVideoTSToQueue(videoTSPath, title, outputPath string
|
|||
if s.jobQueue == nil {
|
||||
return fmt.Errorf("queue not initialized")
|
||||
}
|
||||
|
||||
// Sanitize output path to ensure no special characters in filesystem operations
|
||||
sanitizedOutputPath := outputPath
|
||||
dir := filepath.Dir(outputPath)
|
||||
base := filepath.Base(outputPath)
|
||||
ext := filepath.Ext(base)
|
||||
nameWithoutExt := strings.TrimSuffix(base, ext)
|
||||
sanitizedName := sanitizeForPath(nameWithoutExt)
|
||||
if sanitizedName == "" {
|
||||
sanitizedName = "dvd_output"
|
||||
}
|
||||
sanitizedOutputPath = filepath.Join(dir, sanitizedName+ext)
|
||||
|
||||
job := &queue.Job{
|
||||
Type: queue.JobTypeAuthor,
|
||||
Title: fmt.Sprintf("Author ISO: %s", title),
|
||||
Description: fmt.Sprintf("VIDEO_TS -> %s", utils.ShortenMiddle(filepath.Base(outputPath), 40)),
|
||||
Description: fmt.Sprintf("VIDEO_TS -> %s", utils.ShortenMiddle(filepath.Base(sanitizedOutputPath), 40)),
|
||||
InputFile: videoTSPath,
|
||||
OutputFile: outputPath,
|
||||
OutputFile: sanitizedOutputPath,
|
||||
Config: map[string]interface{}{
|
||||
"videoTSPath": videoTSPath,
|
||||
"outputPath": outputPath,
|
||||
"outputPath": sanitizedOutputPath,
|
||||
"makeISO": true,
|
||||
"title": title,
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user