merge: codeql findings #1 and #2

This commit is contained in:
2026-05-02 23:27:12 +02:00
2 changed files with 20 additions and 7 deletions
+7
View File
@@ -11,6 +11,13 @@ on:
branches: [main]
workflow_dispatch:
# Minimum permissions for a build-only workflow: read the repo, nothing
# else. Closes the CodeQL "Workflow does not contain permissions" alert
# and matches the principle-of-least-privilege the security guide
# recommends for workflows that don't push or create releases.
permissions:
contents: read
jobs:
build:
name: Build (Release)
+12 -6
View File
@@ -94,18 +94,24 @@ internal static class ImGuiUtil
foreach (var part in csText.Split(["\r\n", "\r", "\n"], StringSplitOptions.None))
{
var bytes = Encoding.UTF8.GetBytes(part);
fixed (byte* rawText = bytes)
{
var text = rawText;
var textEnd = text + bytes.Length;
// empty string
if (text == null)
// Empty splits (consecutive newlines) leave bytes.Length at 0
// and the textEnd pointer below would coincide with text. The
// ImGuiNative word-wrap calls treat that as undefined input,
// and the CodeQL "unvalidated local pointer arithmetic" alert
// also flags it. Render an empty line and skip the unsafe
// block entirely for this iteration.
if (bytes.Length == 0)
{
ImGui.TextUnformatted("");
continue;
}
fixed (byte* rawText = bytes)
{
var text = rawText;
var textEnd = text + bytes.Length;
var widthLeft = ImGui.GetContentRegionAvail().X;
var endPrevLine = ImGuiNative.CalcWordWrapPositionA(ImGui.GetFont().Handle, ImGuiHelpers.GlobalScale, text, textEnd, widthLeft);
if (endPrevLine == null)