| 1 |
Engine/SharedTypes.h:81-83 |
Re-enabled static_assert for struct size validation |
CRITICAL |
| 2 |
Designer/Engine/EngineInterop.cs |
Added [return: MarshalAs(UnmanagedType.I1)] to 7 bool P/Invoke functions |
CRITICAL |
| 3 |
Designer/Models/PlaylistModel.cs:315-330 |
RemoveItem() now clears orphaned CurrentItem/NextItem references |
HIGH |
| 4 |
GraphicsMiddleware/wwwroot/index.html |
Added escapeHtml() XSS sanitization function |
CRITICAL |
| 5 |
Designer/PlayoutWindow.xaml.cs:35 |
Added volatile to _lastMosartItemId for thread safety |
HIGH |
| 6 |
GraphicsMiddleware/Services/TemplateService.cs:97 |
Added MaxDepth = 32 to JsonSerializerOptions |
HIGH |
| 7 |
GraphicsMiddleware/Services/TemplateService.cs:331 |
Removed fire-and-forget cache refresh |
HIGH |
| 8 |
GraphicsMiddleware/Services/TemplateService.cs:152-167 |
Added max 64 elements/takes validation |
HIGH |
| 9 |
GraphicsMiddleware/Repositories/TemplateRepository.cs:237 |
Changed bare catch to catch (JsonException) |
MEDIUM |
| 10 |
Designer/Models/PropertyTrackModel.cs:146-151 |
Added division by zero protection in keyframe interpolation |
CRITICAL |
| 11 |
Designer/Services/MosartServer.cs |
Added TcpListener proper disposal in Dispose() |
CRITICAL |
| 12 |
Designer/Services/MosartServer.cs |
Added rate limiting (100 cmd/sec per IP) |
HIGH |
| 13 |
Designer/Services/MosartServer.cs |
Added max connection limit (10 connections) |
HIGH |
| 14 |
Designer/Services/MosartServer.cs |
Added message length validation (1024 bytes max) |
HIGH |
| 15 |
Designer/Engine/EngineRenderer.cs:248-273 |
Added Dispatcher.HasShutdownStarted check |
CRITICAL |
| 16 |
Designer/Engine/EngineRenderer.cs |
Changed DispatcherPriority from Send to Render |
HIGH |
| 17 |
Designer/Services/PlaylistDatabase.cs |
Added CheckAvailabilityAsync() for non-blocking init |
CRITICAL |
| 18 |
Designer/Services/PlaylistDatabase.cs |
Added ConfigureAwait(false) to all async methods |
CRITICAL |
| 19 |
Designer/Services/PlaylistDatabase.cs |
Added path traversal protection with IsPathAllowed() |
CRITICAL |
| 20 |
GraphicsMiddleware/Repositories/TemplateRepository.cs |
Added try-catch with structured logging to all CRUD operations |
HIGH |
| 21 |
GraphicsMiddleware/Services/HealthChecks.cs |
Created health check implementations for DB, Mosart, Templates, Scenes |
HIGH |
| 22 |
GraphicsMiddleware/Program.cs |
Added correlation ID (RequestId) to all log entries |
CRITICAL |
| 23 |
GraphicsMiddleware/Services/TemplateService.cs |
Added symlink traversal protection with ResolveFinalTarget() |
HIGH |
| 24 |
Designer/Engine/EngineRenderer.cs |
Replaced O(n) texture cache eviction with O(1) LRU linked list |
HIGH |
| 25 |
Designer/PlayoutWindow.xaml.cs |
Added UnsubscribeFormFieldEvents() to prevent memory leak |
HIGH |
| 26 |
Designer/PlayoutWindow.xaml.cs |
Added SemaphoreSlim for Mosart command serialization |
CRITICAL |
| 27 |
Designer/Models/PropertyTrackModel.cs |
Added DefaultValue property for missing keyframes |
MEDIUM |
| 28 |
GraphicsMiddleware/appsettings.json |
Changed AllowedHosts from "*" to localhost |
HIGH |
| 29 |
GraphicsMiddleware/appsettings.Development.json |
Added complete development config with CORS |
MEDIUM |
| 30 |
Designer/Services/Logger.cs |
Fixed bare catch blocks with Debug.WriteLine |
MEDIUM |
| 31 |
Designer/Services/AutosaveService.cs |
Fixed bare catch with Logger.Warn |
MEDIUM |
| 32 |
Designer/MainWindow.xaml.cs, PlayoutWindow, etc. |
Added MaxDepth to all JSON deserialization |
HIGH |
| 33 |
Engine/Renderer.cpp |
Added bounds checking for mask layer index |
CRITICAL |
| 34 |
Engine/Renderer.cpp |
Added path traversal protection in LoadTexture |
CRITICAL |
| 35 |
Engine/Renderer.cpp |
Added texture dimension limit (8192x8192 max) |
HIGH |
| 36 |
Designer/Services/AutosaveService.cs |
Fixed async void with try-catch wrapper |
HIGH |
| 37 |
Designer/MainWindow.xaml.cs |
Replaced LINQ with for-loops in RefreshLayersTree |
MEDIUM |
| 38 |
Database schema |
VERIFIED: No mismatch - both use FilledDataJson column |
N/A |
| 39 |
GraphicsMiddleware/Services/InputSanitizer.cs |
NEW: Input sanitization for template names, IDs, filled data |
CRITICAL |
| 40 |
GraphicsMiddleware/Program.cs |
Added input sanitization to POST/PUT endpoints |
CRITICAL |
| 41 |
GraphicsMiddleware/Program.cs |
Added rate limiting middleware (global, control, create policies) |
HIGH |
| 42 |
Engine/VideoPlayer.cpp |
Added video file size limit (500MB), resolution limit (8192x8192), count limit (32) |
CRITICAL |
| 43 |
Engine/VideoPlayer.cpp |
Added path traversal protection in video loading |
CRITICAL |
| 44 |
Engine/DaroEngine.cpp |
Added negative layer count validation |
HIGH |
| 45 |
Designer/Engine/EngineRenderer.cs |
Added struct size runtime validation (C#/C++ mismatch detection) |
CRITICAL |
| 46 |
Designer/Services/MosartServer.cs |
Fixed Slowloris vulnerability with read timeouts |
CRITICAL |
| 47 |
GraphicsMiddleware/Program.cs, TemplateService.cs |
Changed security LogWarning to LogError |
HIGH |
| 48-53 |
Various |
Additional verification of existing protections |
N/A |
| 54 |
GraphicsMiddleware/Repositories/TemplateRepository.cs |
Fixed IEnumerable deferred execution with .ToList() |
MEDIUM |
| 55 |
Designer/Engine/EngineRenderer.cs |
Reused Spout name buffer to avoid per-sender allocation |
HIGH |
| 56 |
GraphicsMiddleware/Services/MosartClient.cs |
Externalized hardcoded timeouts to configuration |
MEDIUM |
| 57 |
GraphicsMiddleware/appsettings*.json |
Added MosartClient timeout configuration |
MEDIUM |
| 58 |
GraphicsMiddleware/Services/TemplateService.cs |
Made template cache duration configurable |
MEDIUM |
| 59 |
GraphicsMiddleware/Program.cs |
Made state expiration configurable |
LOW |
| 60 |
GraphicsMiddleware/appsettings*.json |
Added State and Templates configuration sections |
LOW |
| 61 |
Designer/PlayoutEngineWindow.xaml.cs |
Removed duplicate TargetFps constant, use AppConstants |
LOW |
| 62 |
Designer/Engine/EngineRenderer.cs |
Changed FrameWidth/Height/Fps to delegate to AppConstants |
LOW |
| 63 |
GraphicsMiddleware/wwwroot/control.html |
Added escapeHtml function, escaped log messages |
MEDIUM |
| 64 |
GraphicsMiddleware/wwwroot/index.html |
Escaped error.message in innerHTML |
MEDIUM |
| 65 |
Designer/Services/PathValidator.cs |
NEW: Centralized path validation utility |
HIGH |
| 66 |
Designer/PlayoutWindow.xaml.cs |
Added path validation before file operations |
HIGH |
| 67 |
Designer/TemplateWindow.xaml.cs |
Added path validation before file operations |
HIGH |
| 68 |
Designer/MainWindow.xaml.cs |
Added path validation to save/load operations |
HIGH |
| 69 |
Designer/PlayoutEngineWindow.xaml.cs |
Added path validation to scene loading |
HIGH |
| 70 |
Designer/MainWindow.xaml.cs:423 |
Fixed Designer preview not rendering: UpdateLayersAndRender → UpdateLayersBatch (render thread guard blocked all layer updates) |
HIGH |
| 71 |
Designer/MainWindow.xaml.cs:397-410 |
Fixed last-layer deletion not clearing engine: added ClearLayers() when layer count is 0 |
HIGH |
| 72 |
Designer/MainWindow.xaml.cs + LayerModel.cs + EngineRenderer.cs |
Wired up Video UI: added VideoId property, LoadVideo/UnloadVideo/PlayVideo/PauseVideo/StopVideo wrappers, integrated BrowseVideo/Play/Pause/Stop buttons with engine APIs, added video resource lifecycle management |
HIGH |
| 73 |
Designer/Models/TransfunctionerBindingModel.cs |
Eliminated duplicate property dispatch: Get/SetPropertyValue now delegates to LayerModel instead of duplicating 20+ case switch |
MEDIUM |
| 74 |
Designer/Services/Logger.cs + AutosaveService.cs |
Verified: no bare catch blocks - all catches properly log via Debug.WriteLine or Logger |
LOW |
| 75 |
Designer/Models/PropertyTrackModel.cs |
Fixed easing function terminology: corrected misleading CSS references in ApplyEasing comments (keyframe-centric naming, After Effects convention) |
LOW |
| 76 |
Designer/PlayoutEngineWindow.xaml.cs |
Added EnsureLayerResources for playout: loads textures, Spout receivers, videos before sending layers to engine (were missing - images/videos wouldn't render in playout) |
HIGH |
| 77 |
Designer/PlayoutEngineWindow.xaml.cs |
Added ReleaseAllResources: cleans up GPU resources when loading new scene (prevents texture/video leaks on scene transitions) |
HIGH |
| 78 |
Designer/PlayoutEngineWindow.xaml.cs |
Added empty layer handling: ClearLayers() when layer count is 0 (same fix as #71 for playout) |
MEDIUM |
| 79 |
Designer/Models/StringPropertyTrackModel.cs |
Replaced O(n) LINQ FirstOrDefault with O(log n) binary search in SetKeyframe/DeleteKeyframe (consistency with PropertyTrackModel) |
MEDIUM |
| 80 |
Designer/MainWindow.xaml.cs + PlayoutEngineWindow.xaml.cs |
Replaced magic number 64 with DaroConstants.MAX_LAYERS in layer buffer allocation |
LOW |
| 81 |
Designer/Models/LayerModel.cs + ProjectModel.cs |
Replaced hardcoded 1920/1080/960/540 with AppConstants.FrameWidth/FrameHeight |
LOW |
| 82 |
Designer/MainWindow.xaml.cs |
Fixed fire-and-forget Task.Delay autosave title reset: added HasShutdownStarted guard |
LOW |
| 83 |
Designer/TemplateWindow.xaml.cs |
Fixed event handler memory leak: added CleanupCanvasEventHandlers() to unsubscribe Border/Rectangle mouse handlers before canvas rebuild |
HIGH |
| 84 |
Designer/TemplateWindow.xaml.cs |
Added resource cleanup on Window_Closing: calls CleanupCanvasEventHandlers before close |
MEDIUM |
| 85 |
Designer/Engine/EngineRenderer.cs |
Fixed shared texture corruption: added reference counting to TextureCacheEntry - LoadTexture increments, UnloadTexture decrements, only GPU-unload at refcount 0 |
CRITICAL |
| 86 |
Designer/Engine/EngineRenderer.cs |
Fixed LRU eviction for refcounted textures: EvictOldestTexture now skips entries with refcount > 0 |
HIGH |
| 87 |
Designer/Engine/EngineRenderer.cs |
Fixed shared Spout receiver corruption: added reference counting to SpoutReceiverCache - ConnectSpoutReceiver increments, DisconnectSpoutReceiver only disconnects at refcount 0 |
CRITICAL |
| 88 |
Designer/Services/PlaylistDatabase.cs:69 |
Fixed ObservableCollection JSON deserialization: System.Text.Json cannot deserialize ObservableCollection directly - now deserializes to List first, then wraps |
CRITICAL |
| 89 |
Designer/MainWindow.xaml.cs:44 |
Removed duplicate TimelineStartOffset constant: replaced local private const with AppConstants.TimelineStartOffset (7 usages) |
LOW |
| 90 |
GraphicsMiddleware/wwwroot/index.html:361-395 |
Fixed XSS in dynamic form generation: added escapeAttr() function, escaped placeholder/defaultText/name/id attributes in template form |
MEDIUM |
| 91 |
Designer/PlayoutEngineWindow.xaml.cs:120-167 |
Fixed TOCTOU race condition: capture volatile _animation/_playbackStopwatch to local variables before null-check-then-use in OnPlaybackTick and RenderFrame |
HIGH |
| 92 |
GraphicsMiddleware/Program.cs:15-28 |
Made log path configurable: pre-build config to read Logging:LogPath from appsettings before Serilog bootstrap |
MEDIUM |
| 93 |
GraphicsMiddleware/wwwroot/index.html:356-376 |
Replaced magic numbers for element types with named constants: ELEMENT_TYPE_LABEL=0, ELEMENT_TYPE_TEXTBOX=1, ELEMENT_TYPE_MULTILINE=2 |
LOW |
| 94 |
GraphicsMiddleware/wwwroot/control.html:209 |
Fixed hardcoded port display: now reads Mosart port from health check API response dynamically |
LOW |
| 95 |
GraphicsMiddleware/Services/HealthChecks.cs:62-82 |
Added port data to Mosart health check response (from configuration) so frontend can display actual configured port |
LOW |
| 96 |
GraphicsMiddleware/Program.cs:206-213 |
Added data field to health check JSON response writer (exposes health check custom data to clients) |
LOW |
| 97 |
Designer/Services/PlaylistDatabase.cs:91,582 |
Removed empty IDisposable implementation: connections are per-operation, no resources to dispose |
LOW |
| 98 |
Designer/MainWindow.xaml.cs |
Added _engine == null guards to 7 button/selection handlers: BrowseFile_Click, BrowseVideo_Click, VideoPlay/Pause/Stop_Click, CmbSpoutSenders_SelectionChanged, EnsureLayerResources |
HIGH |
| 99 |
GraphicsMiddleware/Services/MosartClient.cs |
Added ConfigureAwait(false) to all 15+ async calls: WaitAsync, ConnectAsync, WriteAsync, ReadAsync, FlushAsync, Task.Delay, internal methods |
MEDIUM |
| 100 |
GraphicsMiddleware/Repositories/TemplateRepository.cs |
Added ConfigureAwait(false) to all 5 Dapper async calls: ExecuteAsync, QuerySingleOrDefaultAsync, QueryAsync |
MEDIUM |
| 101 |
GraphicsMiddleware/Repositories/DatabaseConnectionFactory.cs |
Added ConfigureAwait(false) to schema init: WaitAsync, ExecuteScalarAsync, ExecuteNonQueryAsync |
MEDIUM |
| 102 |
GraphicsMiddleware/Services/TemplateService.cs |
Added ConfigureAwait(false) to file I/O: ReadAllTextAsync, LoadTemplateAsync |
MEDIUM |
| 103 |
Designer/PlayoutEngineWindow.xaml.cs:132 |
Fixed potential integer overflow in frame calculation: Math.Min clamp prevents overflow for long-running sessions |
MEDIUM |
| 104 |
Designer/Models/KeyframeModel.cs:13-42 |
Added input validation: Frame clamped to non-negative (Math.Max(0,..)), EaseIn/EaseOut clamped to 0-1 range (Math.Clamp) |
HIGH |
| 105 |
GraphicsMiddleware/Program.cs:376,405,521 |
Added Guid.TryParse() validation to GET/DELETE /api/items/{id} and POST /api/control/cue/{itemId} endpoints (consistent with PUT) |
MEDIUM |
| 106 |
GraphicsMiddleware/Program.cs:548,573,600,625 |
Added CancellationToken parameter to all control endpoints (play/stop/pause/continue) and pass through to mosartClient |
MEDIUM |
| 107 |
Designer/Models/AnimationModel.cs:38-52 |
Added deserialization validation: null/empty name fallback, non-positive LengthFrames default, null Layers guard |
LOW |
| 108 |
Designer/Engine/EngineInterop.cs:82,89 |
Added explicit ArraySubType to MarshalAs attributes: U1 for texturePath byte array, I4 for maskedLayerIds int array |
LOW |
| 109 |
Designer/Models/ProjectModel.cs:80-93 |
Added deserialization validation: TimelineZoom default if <=0, null Animations guard |
LOW |
| 110 |
Designer/TemplateWindow.xaml.cs |
Changed bare catch to catch (FormatException) in ParseBrush - only catches expected parse failures |
MEDIUM |
| 111 |
Designer/TemplateWindow.xaml.cs + MainWindow.xaml.cs |
Added substring bounds checks before .Substring() calls on drag-drop data and hex color parsing |
MEDIUM |
| 112 |
GraphicsMiddleware/Services/MosartClient.cs:111 |
Added _isDisposed guard to DisconnectAsync() preventing operations on disposed semaphore |
HIGH |
| 113 |
GraphicsMiddleware/Services/MosartClient.cs:423 |
Removed unnecessary GC.SuppressFinalize(this) - class has no finalizer, SuppressFinalize is misleading |
LOW |
| 114 |
Designer/MainWindow.xaml.cs:138 |
Changed playback timer from DispatcherPriority.Send to DispatcherPriority.Render - prevents UI starvation during animation playback |
MEDIUM |
| 115 |
Designer/MainWindow.xaml.cs:935-937 |
Fixed layer tree event handler memory leak: added CleanupLayerTreeHandlers() to unsubscribe MouseLeftButtonDown/MouseMove/Click handlers before Children.Clear() |
HIGH |
| 116 |
Designer/PlayoutEngineWindow.xaml.cs:462-466 |
Fixed GPU resource leak on window close: added ReleaseAllResources() before _engine.Dispose() to properly unload textures, videos, Spout receivers |
HIGH |
| 117 |
GraphicsMiddleware/Services/TemplateService.cs:634 |
Changed bare catch to catch (Exception) in ResolveFinalTarget() - avoids catching fatal exceptions (StackOverflow, ThreadAbort) |
MEDIUM |
| 118 |
GraphicsMiddleware/Services/MosartClient.cs:427-451 |
Fixed double disposal: Dispose(bool) now reuses CloseConnectionAsync() instead of duplicating close logic with potential double-close of TcpClient |
MEDIUM |
| 119 |
Designer/MainWindow.xaml.cs:2879-2883 |
Added GPU resource cleanup on MainWindow close: calls CleanupLayerTreeHandlers() and ReleaseAllProjectResources() before engine disposal |
HIGH |
| 120 |
Designer/PlayoutWindow.xaml.cs:275-283 |
Added null check after JsonSerializer.Deserialize<TemplateModel> and null-safe Elements access in template loading |
MEDIUM |
| 121 |
Designer/Services/AutosaveService.cs:89-103 |
Fixed TOCTOU race: capture _project and _getProjectData to local variables in SaveBackupAsync() before null check; added _disposed guard in OnTimerTick |
MEDIUM |
| 122 |
Designer/MainWindow.xaml.cs:482,670 |
Added null-safe _project access in Menu_NewProject and ModeTemplate_Click (consistency with ModePlayout_Click) |
LOW |
| 123 |
Designer/MainWindow.xaml.cs:2836 |
Added null-safe _project access in Window_Closing handler |
LOW |
| 124 |
Designer/Services/PathValidator.cs:77 + GraphicsMiddleware/Program.cs:182 + Designer/Services/MosartServer.cs:239 |
Changed 3 remaining bare catch blocks to catch (Exception) - avoids catching fatal exceptions |
MEDIUM |
| 125 |
Designer/Models/PlaylistModel.cs:457-464 |
Removed dead code in UpdateNextItem(): firstReady variable was assigned but never used |
LOW |
| 126 |
GraphicsMiddleware/wwwroot/index.html:305-313,487-494 |
Replaced inline onclick handlers with data-id attributes and addEventListener event delegation - prevents XSS via template IDs containing special characters |
HIGH |
| 127 |
Designer/TemplateWindow.xaml.cs:1236 |
Fixed CheckBox event handler memory leak: unsubscribe Checked/Unchecked handlers before ActionAnimationsList.Children.Clear() in UpdateActionAnimationsUI |
MEDIUM |
| 128 |
Engine/VideoPlayer.cpp:385-390 |
Added buffer bounds check in video frame copy: validates srcLength >= requiredSize before memcpy loop, falls back to copying only available rows |
HIGH |
| 129 |
Designer/TemplateWindow.xaml.cs:1608 |
Added ActionAnimationsList CheckBox handler cleanup in Window_Closing |
MEDIUM |
| 130 |
Designer/PlayoutWindow.xaml.cs:1171 |
Removed invalid .Dispose() call on PlaylistDatabase which no longer implements IDisposable (would cause compile error) |
CRITICAL |
| 131 |
Engine/Renderer.cpp:80 |
Added FAILED() check on CreateQuery for GPU sync query - prevents use of invalid query object |
HIGH |
| 132 |
Engine/Renderer.cpp:1512 |
Added FAILED() check on CreateShaderResourceView in UpdateSpoutReceivers - resets texture on SRV creation failure |
HIGH |
| 133 |
Engine/Renderer.cpp:1325 |
Added MultiByteToWideChar error check (wideLen <= 0) in LoadTexture - prevents empty wstring from zero-length conversion |
MEDIUM |
| 134 |
Engine/Renderer.cpp:1434 |
Added index < 0 bounds check in GetSpoutSenderName - prevents negative index passed to Spout library |
MEDIUM |
| 135 |
Engine/VideoPlayer.cpp:62 |
Added MultiByteToWideChar error check (wlen <= 0) in LoadVideo - prevents empty wstring creation |
MEDIUM |
| 136 |
Engine/FrameBuffer.cpp:12 |
Added dimension validation in Initialize - rejects width/height <= 0 or > 16384 to prevent integer overflow in buffer size calculation |
HIGH |
| 137 |
Engine/DaroEngine.cpp:152 |
Added maskedLayerCount bounds clamp to DARO_MAX_LAYERS in mask lookup - prevents buffer read overflow from malformed layer data |
HIGH |
| 138 |
Designer/Services/AutosaveService.cs:112 |
Added ConfigureAwait(false) to WriteAllTextAsync - service code should not capture UI context |
MEDIUM |
| 139 |
Designer/MainWindow.xaml.cs:154 |
Added TaskScheduler.Default to Task.Delay().ContinueWith() to avoid capturing synchronization context |
LOW |
| 140 |
Designer/MainWindow.xaml.cs |
Cached 4 context menu brushes as frozen static fields (BrushMenuBg, BrushMenuBorder, BrushMenuHover, BrushMenuDisabled) - eliminates per-right-click SolidColorBrush allocation |
MEDIUM |
| 141 |
Designer/TemplateWindow.xaml.cs:652 |
Added Freeze() to dynamically created brush in ParseBrush() - makes brush thread-safe and GC-friendly |
MEDIUM |
| 142 |
Designer/Engine/EngineRenderer.cs:686 |
Changed GetSpoutSenders() return type from List<string> to IReadOnlyList<string> - prevents callers from mutating internal list |
LOW |
| 143 |
Designer/PlayoutWindow.xaml.cs:407 |
Cached error border brush as frozen static BrushFormError - eliminates per-validation SolidColorBrush allocation |
LOW |
| 144 |
Designer/MainWindow.xaml.cs:3246-3247 |
Added Freeze() to StepEditBrush and DefaultEditBrush static brushes in static constructor |
LOW |
| 145 |
Engine/VideoPlayer.cpp:383 |
Added srcPitch == 0 validation guard in CopyFrameToTexture - prevents divide-by-zero in row count calculation |
HIGH |
| 146 |
Engine/DaroEngine.cpp:107 |
Added elapsed time zero check (> 0.000001) in FPS calculation in Daro_EndFrame - prevents division by zero |
HIGH |
| 147 |
Engine/Renderer.cpp:839-846 |
Added HRESULT checks for CreateEllipseGeometry and CreateRectangleGeometry in D2D mask geometry creation |
HIGH |
| 148 |
Engine/Renderer.cpp:872-935 |
Restructured outer mask PathGeometry creation with proper HRESULT checks on CreatePathGeometry and Open - falls back to no mask on failure instead of using null geometry |
CRITICAL |
| 149 |
Engine/Renderer.cpp:947 |
Changed wcslen(layer->textContent) to wcsnlen(layer->textContent, DARO_MAX_TEXT) - prevents buffer overread if textContent is not null-terminated |
HIGH |
| 150 |
Engine/FrameBuffer.cpp:119 |
Fixed buffer overread in row-by-row copy: use min(srcStride, m_Stride) as copy length instead of always m_Stride |
HIGH |
| 151 |
GraphicsMiddleware/Program.cs:400 |
Added Math.Clamp(limit ?? 100, 1, 500) on GET /api/items - prevents unbounded database queries from ?limit=999999 |
MEDIUM |
| 152 |
GraphicsMiddleware/Program.cs:436 |
Added filledData.Count > 200 check on PUT /api/items/{id}/data - prevents memory abuse with oversized dictionaries |
MEDIUM |
| 153 |
Engine/VideoPlayer.cpp:383 |
Fixed buffer lock leak on srcPitch == 0 early return path in CopyFrameToTexture - now calls buffer->Unlock() before returning |
CRITICAL |
| 154 |
Engine/VideoPlayer.cpp:120 |
Added HRESULT check on MFGetAttributeSize in LoadVideo - returns false on failure instead of using unvalidated dimensions |
HIGH |
| 155 |
Engine/VideoPlayer.cpp:136 |
Added HRESULT check on MFGetAttributeRatio in LoadVideo - only uses frame rate values when API call succeeds |
MEDIUM |
| 156 |
Engine/Renderer.cpp:1501-1533 |
Fixed Spout receiver connection logic: validate width/height > 0 before texture creation, only set info.connected = true when both texture AND SRV creation succeed |
CRITICAL |
| 157 |
Designer/PlayoutWindow.xaml.cs:240 |
Added null-safe access in CountTemplates - folder.Templates?.Count ?? 0 and folder.SubFolders?.Sum(...) ?? 0 prevent NullReferenceException |
MEDIUM |
| 158 |
Engine/Renderer.cpp:697 |
Changed std::wstring fontFamily(layer->fontFamily) to use wcsnlen(layer->fontFamily, DARO_MAX_FONTNAME) - prevents buffer overread if fontFamily not null-terminated |
HIGH |
| 159 |
Engine/Renderer.cpp:1360 |
Added HRESULT check on frame->GetSize() in LoadTexture - returns -1 if WIC frame size query fails |
MEDIUM |
| 160 |
GraphicsMiddleware/Program.cs |
Aligned filledData limit with InputSanitizer.MaxFilledDataEntries (100) instead of hardcoded 200 |
MEDIUM |
| 161 |
Designer/Models/LayerModel.cs |
Clamped maskedLayerCount to DaroConstants.MAX_LAYERS in ToNative() - prevents oversized mask array from reaching C++ |
HIGH |
| 162 |
Engine/DaroEngine.cpp:155 |
Validated maskedId >= 0 before using as map key in mask lookup - prevents negative index corruption |
HIGH |
| 163 |
Engine/Renderer.cpp |
Cast pixel allocation to size_t - prevents integer overflow on large textures: std::vector<BYTE> pixels((size_t)width * height * 4) |
MEDIUM |
| 164 |
GraphicsMiddleware/wwwroot/control.html |
Added parseInt radix parameter (10) and isNaN check on port display |
LOW |
| 165 |
GraphicsMiddleware/wwwroot/index.html |
Added parseInt radix parameter (10) for maxLength attribute |
LOW |
| 166 |
GraphicsMiddleware/Services/TemplateService.cs |
Added cancellationToken.ThrowIfCancellationRequested() at top of template scan loop |
MEDIUM |
| 167 |
Designer/Models/PlaylistModel.cs:150 |
Added ArgumentNullException guard and null-safe filledData/Takes in FromTemplate() |
HIGH |
| 168 |
Designer/Models/PlaylistModel.cs:399 |
Validated IndexOf result >= 0 in TakeOnAir() before calculating next index |
MEDIUM |
| 169 |
Designer/TemplateWindow.xaml.cs |
Added null guard for _currentTemplate in UpdateCanvasFromTemplate |
MEDIUM |
| 170 |
Designer/MainWindow.xaml.cs |
Changed _project.SelectedAnimation?. to _project?.SelectedAnimation?. across 7 timeline operations (replace_all) |
HIGH |
| 171 |
Designer/Models/TemplateModel.cs:161 |
Added null-safe iteration in Children property: SubFolders?. and Templates?. checks |
LOW |
| 172 |
Engine/Renderer.cpp |
Added shader compilation error logging via OutputDebugStringA when D3DCompile fails |
MEDIUM |
| 173 |
GraphicsMiddleware/Services/MosartClient.cs:429 |
Fixed thread-unsafe disposal: replaced volatile check-then-set with Interlocked.CompareExchange for atomic dispose guard |
HIGH |
| 174 |
Designer/Engine/EngineRenderer.cs:714 |
Fixed Spout receiver cache race condition: added _spoutCacheLock to protect compound TryGetValue/update operations on ConcurrentDictionary |
HIGH |
| 175 |
Designer/Engine/EngineRenderer.cs:320 |
Added dimension validation in CopyFrameToBitmap: verify width/height from engine match bitmap before Buffer.MemoryCopy to prevent overflow; cast to long for size calculation |
CRITICAL |
| 176 |
Engine/DaroEngine.cpp:328 |
Fixed Daro_LoadVideo return value: changed from 0 to -1 on failure for consistency with Daro_LoadTexture |
MEDIUM |
| 177 |
Designer/Services/MosartServer.cs:249 |
Fixed BroadcastState fire-and-forget: wrapped BroadcastAsync in async void with try-catch to prevent unobserved task exceptions |
HIGH |
| 178 |
Engine/DaroEngine.cpp:226 |
Added g_Initialized guard and totalFrames <= 0 validation to Daro_SeekToFrame/Daro_SeekToTime |
MEDIUM |
| 179 |
Designer/TemplateWindow.xaml.cs:171 |
Added try-catch to TemplatesTree_SelectedItemChanged async void handler - prevents crash on LoadTemplateAsync failure |
HIGH |
| 180 |
Designer/TemplateWindow.xaml.cs |
Added try-catch to LoadScene_Click, Menu_OpenTemplate, Menu_SaveTemplate, Menu_SaveTemplateAs async void handlers |
HIGH |
| 181 |
Designer/MainWindow.xaml.cs |
Added try-catch to Menu_NewProject, Menu_OpenProject, Menu_SaveProject, Menu_SaveProjectAs async void handlers with user error feedback |
HIGH |
| 182 |
Designer/MainWindow.xaml.cs |
Added try-catch to ModeTemplate_Click and ModePlayout_Click async void handlers |
HIGH |
| 183 |
Engine/VideoPlayer.cpp:279 |
Fixed race condition: added std::lock_guard<std::mutex> to UpdateFrame() - was accessing m_Loaded/m_Playing/m_Reader without lock while LoadVideo/UnloadVideo modify them under lock |
CRITICAL |
| 184 |
Engine/VideoPlayer.cpp:224-241 |
Fixed race condition: added std::lock_guard<std::mutex> to Play()/Pause()/Stop() - were modifying shared state without synchronization |
HIGH |
| 185 |
Engine/VideoPlayer.cpp:449-501 |
Fixed race condition in VideoManager: added m_ManagerMutex to LoadVideo/UnloadVideo/GetPlayer/UpdateAll - m_Players map modified concurrently by render thread and API thread |
CRITICAL |
| 186 |
Engine/FrameBuffer.cpp:23-30 |
Fixed CreateFileMappingW DWORD truncation: split m_BufferSize into proper high/low DWORD pair for large buffer safety |
HIGH |
| 187 |
GraphicsMiddleware/Services/HealthChecks.cs:191 |
Fixed scene health check: was only searching *.dscene but templates link .daro files - now searches both extensions |
MEDIUM |
| 188 |
Designer/Engine/EngineRenderer.cs:375 |
Fixed null reference race: _fpsStopwatch captured to local before use in CopyFrameToBitmap - can be nulled by concurrent Shutdown() |
HIGH |
| 189 |
Engine/Renderer.cpp:1553-1560 |
Fixed D3D error: validate Spout receiver source/dest texture dimensions match before CopyResource - prevents crash when sender changes resolution mid-stream |
HIGH |