fix: add i18n translation key and fix security validation path in SaveImageTool

This commit is contained in:
Roo Code 2026-01-22 06:52:52 +00:00
parent 1632659c02
commit 7f1cab989f
19 changed files with 69 additions and 15 deletions

View file

@ -36,21 +36,7 @@ export class SaveImageTool extends BaseTool<"save_image"> {
return
}
// Validate access via .rooignore
const accessAllowed = task.rooIgnoreController?.validateAccess(relPath)
if (!accessAllowed) {
await task.say("rooignore_error", relPath)
pushToolResult(formatResponse.rooIgnoreError(relPath))
return
}
// Check write protection
const isWriteProtected = task.rooProtectedController?.isWriteProtected(relPath) || false
const fullPath = path.resolve(task.cwd, relPath)
const isOutsideWorkspace = isPathOutsideWorkspace(fullPath)
// Validate the image data format
// Validate the image data format first (to determine finalPath)
const base64Match = data.match(/^data:image\/(png|jpeg|jpg|gif|webp|svg\+xml);base64,(.+)$/)
if (!base64Match) {
await task.say("error", t("tools:saveImage.invalidDataFormat"))
@ -74,6 +60,20 @@ export class SaveImageTool extends BaseTool<"save_image"> {
finalPath = `${finalPath}.${ext}`
}
// Validate access via .rooignore (using finalPath after extension is added)
const accessAllowed = task.rooIgnoreController?.validateAccess(finalPath)
if (!accessAllowed) {
await task.say("rooignore_error", finalPath)
pushToolResult(formatResponse.rooIgnoreError(finalPath))
return
}
// Check write protection (using finalPath after extension is added)
const isWriteProtected = task.rooProtectedController?.isWriteProtected(finalPath) || false
const fullPath = path.resolve(task.cwd, finalPath)
const isOutsideWorkspace = isPathOutsideWorkspace(fullPath)
const sharedMessageProps = {
tool: "saveImage" as const,
path: getReadablePath(task.cwd, finalPath),

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "Es requereix autenticació de Roo Code Cloud per a la generació d'imatges. Inicia sessió a Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Format de dades d'imatge no vàlid. S'esperava una URL de dades base64 (p. ex., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "Roo Code Cloud-Authentifizierung ist für die Bildgenerierung erforderlich. Bitte melde dich bei Roo Code Cloud an."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "Roo Code Cloud authentication is required for image generation. Please sign in to Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "Se requiere autenticación de Roo Code Cloud para la generación de imágenes. Por favor, inicia sesión en Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "L'authentification Roo Code Cloud est requise pour la génération d'images. Veuillez vous connecter à Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "छवि निर्माण के लिए Roo Code Cloud प्रमाणीकरण आवश्यक है। कृपया Roo Code Cloud में साइन इन करें।"
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -30,5 +30,8 @@
"roo": {
"authRequired": "Autentikasi Roo Code Cloud diperlukan untuk menghasilkan gambar. Silakan masuk ke Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "L'autenticazione Roo Code Cloud è richiesta per la generazione di immagini. Accedi a Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "画像生成にはRoo Code Cloud認証が必要です。Roo Code Cloudにサインインしてください。"
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "이미지 생성에는 Roo Code Cloud 인증이 필요합니다. Roo Code Cloud에 로그인하세요."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "Roo Code Cloud-authenticatie is vereist voor het genereren van afbeeldingen. Log in bij Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "Uwierzytelnienie Roo Code Cloud jest wymagane do generowania obrazów. Zaloguj się do Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "A autenticação do Roo Code Cloud é necessária para geração de imagens. Faça login no Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "Для генерации изображений требуется аутентификация Roo Code Cloud. Войдите в Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "Görüntü oluşturma için Roo Code Cloud kimlik doğrulaması gereklidir. Lütfen Roo Code Cloud'da oturum açın."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "Yêu cầu xác thực Roo Code Cloud để tạo hình ảnh. Vui lòng đăng nhập vào Roo Code Cloud."
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "图像生成需要 Roo Code Cloud 认证。请登录 Roo Code Cloud。"
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}

View file

@ -27,5 +27,8 @@
"roo": {
"authRequired": "圖像生成需要 Roo Code Cloud 認證。請登入 Roo Code Cloud。"
}
},
"saveImage": {
"invalidDataFormat": "Invalid image data format. Expected a base64 data URL (e.g., 'data:image/png;base64,...')."
}
}