From 064dc292136205c36e9a0568f7453918be9044d1 Mon Sep 17 00:00:00 2001 From: David Sarno Date: Wed, 3 Sep 2025 17:58:05 -0700 Subject: [PATCH] fix: Implement CodeRabbit resource management and type safety improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move RenderTexture cleanup to finally block to ensure proper disposal - Add PNG data validation before Base64 conversion - Add explicit TextureFormat.RGB24 specification - Add bool() coercion for prefer_last parameter to handle non-boolean JSON values 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- UnityMcpBridge/Editor/Tools/ManageAsset.cs | 17 ++++++++++------- .../src/tools/manage_script_edits.py | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/UnityMcpBridge/Editor/Tools/ManageAsset.cs b/UnityMcpBridge/Editor/Tools/ManageAsset.cs index 59f31e7..70e3ff6 100644 --- a/UnityMcpBridge/Editor/Tools/ManageAsset.cs +++ b/UnityMcpBridge/Editor/Tools/ManageAsset.cs @@ -1279,21 +1279,24 @@ namespace MCPForUnity.Editor.Tools rt = RenderTexture.GetTemporary(preview.width, preview.height); Graphics.Blit(preview, rt); RenderTexture.active = rt; - readablePreview = new Texture2D(preview.width, preview.height); + readablePreview = new Texture2D(preview.width, preview.height, TextureFormat.RGB24, false); readablePreview.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0); readablePreview.Apply(); + + var pngData = readablePreview.EncodeToPNG(); + if (pngData != null && pngData.Length > 0) + { + previewBase64 = Convert.ToBase64String(pngData); + previewWidth = readablePreview.width; + previewHeight = readablePreview.height; + } } finally { RenderTexture.active = previous; if (rt != null) RenderTexture.ReleaseTemporary(rt); + if (readablePreview != null) UnityEngine.Object.DestroyImmediate(readablePreview); } - - var pngData = readablePreview.EncodeToPNG(); - previewBase64 = Convert.ToBase64String(pngData); - previewWidth = readablePreview.width; - previewHeight = readablePreview.height; - UnityEngine.Object.DestroyImmediate(readablePreview); } catch (Exception ex) { diff --git a/UnityMcpBridge/UnityMcpServer~/src/tools/manage_script_edits.py b/UnityMcpBridge/UnityMcpServer~/src/tools/manage_script_edits.py index 5101670..91a107b 100644 --- a/UnityMcpBridge/UnityMcpServer~/src/tools/manage_script_edits.py +++ b/UnityMcpBridge/UnityMcpServer~/src/tools/manage_script_edits.py @@ -42,7 +42,7 @@ def _apply_edits_locally(original_text: str, edits: List[Dict[str, Any]]) -> str flags = re.MULTILINE | (re.IGNORECASE if edit.get("ignore_case") else 0) # Find the best match using improved heuristics - match = _find_best_anchor_match(anchor, text, flags, edit.get("prefer_last", True)) + match = _find_best_anchor_match(anchor, text, flags, bool(edit.get("prefer_last", True))) if not match: if edit.get("allow_noop", True): continue