Repository navigation
fix(dazzle): Prevent undefined behavior when reading flare UVs from the INI - #3658
CryoTheRenegade wants to merge 2 commits into
Conversation
…f a DazzleINIClass cast Init_From_INI cast its INIClass pointer to DazzleINIClass to call Get_Vector4, but ww3d.cpp creates a plain INIClass, so the object never was a DazzleINIClass. Replace the class with a file-static Get_INI_Vector4 that takes the INIClass and has the same body. The unused Get_Vector2 and Get_Vector3 go with the class. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…_INI_Vector4 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. WalkthroughThe change replaces the ChangesLensflare INI parsing
Estimated code review effort: 2 (Simple) | ~10 minutes Change: Refactor Suggested labels: Suggested reviewers: Merge Risk:
|
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
[Low impact] The PR appears safe to merge.
|
Follow-up to #3655, from xezon's "Are there more of these?" on #3580.
DazzleRenderObjClass::Init_From_INIcasts itsconst INIClass*to aDazzleINIClass*to callGet_Vector4. The object is a plainINIClass, never aDazzleINIClass, so calling aDazzleINIClassmember through that pointer is undefined behavior.DazzleINIClassonly existed to addGet_Vector2,Get_Vector3andGet_Vector4, andInit_From_INIonly callsGet_Vector4. The class is replaced by a file-staticGet_INI_Vector4that takes theINIClassand uses its publicFind_Entry, and the unusedGet_Vector2andGet_Vector3are removed:The parsing is unchanged. The same change is made in the Generals and Zero Hour copies of
dazzle.cpp.Evidence
dazzle.objfor both games against a build ofmain. The threeDazzleINIClassmembers are gone, and nothing else references them.Init_From_INIis identical. It already inlinedGet_Vector4, and it inlinesGet_INI_Vector4the same way.Init_From_INInow inlines the helper. The call toGet_Vector4is replaced by the sameFind_Entryandsscanfcalls thatGet_Vector4made. The float arithmetic is the same.AI Disclosure
Claude Opus 5.5 was used to aid in implementation and to compare the disassembly.