Skip to content

Conversation

@CJ-SPT
Copy link
Contributor

@CJ-SPT CJ-SPT commented Oct 28, 2025

Validate the core assembly reference version when loading mods, give it a more description exception and kill the server if it requires a newer SPT version than the one being ran.

@qodo-merge-for-open-source
Copy link

qodo-merge-for-open-source bot commented Oct 28, 2025

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Prevent null reference and improve version parsing
Suggestion Impact:The commit added a null check for the referenced assembly version before proceeding, preventing a potential NullReferenceException. However, it did not implement the improved version construction from components and kept the string slicing approach.

code diff:

                 .GetReferencedAssemblies()
                 .FirstOrDefault(asm => asm.Name == "SPTarkov.Server.Core")
                 ?.Version?.ToString();
+
+            if (sptCoreAsmRefVersion is null)
+            {
+                continue;
+            }
 
             var modRefVersion = new SemanticVersioning.Version(sptCoreAsmRefVersion?[..^2]!);

Add a null check for the assembly reference to prevent a potential
NullReferenceException and construct the version object directly from its
components to avoid fragile string parsing.

SPTarkov.Server/Modding/ModValidator.cs [170-182]

-var sptCoreAsmRefVersion = assembly
+var sptCoreAsmRef = assembly
     .GetReferencedAssemblies()
-    .FirstOrDefault(asm => asm.Name == "SPTarkov.Server.Core")
-    ?.Version?.ToString();
+    .FirstOrDefault(asm => asm.Name == "SPTarkov.Server.Core");
 
-var modRefVersion = new SemanticVersioning.Version(sptCoreAsmRefVersion?[..^2]!);
+if (sptCoreAsmRef?.Version is null)
+{
+    continue;
+}
+
+var modRefVersion = new SemanticVersioning.Version(
+    sptCoreAsmRef.Version.Major,
+    sptCoreAsmRef.Version.Minor,
+    sptCoreAsmRef.Version.Build
+);
+
 if (modRefVersion > sptVersion)
 {
     throw new Exception(
         $"Mod: {modName} requires a minimum SPT version of `{modRefVersion}`, but you are running `{sptVersion}`. Please update SPT to use this mod."
     );
 }
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a potential NullReferenceException that would crash the application, and also points out fragile string manipulation, providing a much more robust implementation.

Medium
  • Update

Copy link
Member

@ArchangelWTF ArchangelWTF left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@chompDev chompDev merged commit b99f3f6 into develop Oct 28, 2025
5 checks passed
@chompDev chompDev deleted the Assembly-ref-validation branch October 28, 2025 21:01
DrakiaXYZ added a commit that referenced this pull request Oct 31, 2025
* Fix exception sometimes thrown on save
- Switch back from File.Rename to File.Move, as Rename is throwing exceptions on some users systems

* Change BTR skin to tarcola during Christmas event

* Added comment

* Remove unused using

* Add wipe Response model

* formatting and add Wipe Endpoint to V2

* Format Style Fixes

* Merge pull request #669 from sp-tarkov/Assembly-ref-validation

Validate core assembly reference when loading mods

* removed zombies from customs and interchange + increased infection across other maps that have zombie kill quests

* Don't apply hostility changes to maps without zombies during halloween

`ReplaceBotHostiltiy` has optional map whitelist param

* Updated hostility values for maps with infection:
bosses = hostile to player not to pmc bots
followers = hostile to player not to pmc bots
pmcs = hostile to player + always hostile to scavs
scavs = hostile to player and pmc bots
raiders = hostile to player and pmc bots

Adjusted infection rates to just maps with zombie kill quests

* Format Style Fixes

* Added missing values for event bosses

* Format Style Fixes

* Added missing values for `ravangezryachiyevent`
Fixed preset typo `bossTagillaAgro`

* Format Style Fixes

* Flagged `Night of The Cult` as halloween quest

* Fixed incorrect logic

* Enabled `Night of The Cult` bosses to spawn

* Format Style Fixes

* Addd a new ReleaseCheckService to notify users of updates (#670)

* Addd a new ReleaseCheckService to notify users of updates
- Pulls the latest release from GitHub API to compare the tag against the users current SPT version
- Runs at the very end of the startup process to avoid being pushed off screen by mod logging
- Only notifies of patch version increments, not major or minor increments
- Links the release notes so users can Ctrl+Click to open directly to the upgrade page
- Is run on its own thread, and discards all errors, so as to not impact users without an internet connection or ability to access GitHub

* Formatting

* Use record for the ReleaseInformation class

---------

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>

* ProfileDataService changes:

Added `ClearProfileData()`
Replaced filepath access with `Path.Combine`
Reduced various sources of duplication

* Adjusted `Goons` spawn chance to 20% across `Customs/Lighthouse/Woods/Shoreline`

* Account for compound items in DialogHelper.GetMessageItemContents

* Generate weapon/armor price based on the child item price total

* Added halloween event bosses to april event

* Flagged infected spawns as `ForceSpawn` and ``

* Add migration for invalid pockets

* Default assign IEnumerable

* Post raid effect fixes:
When exiting raid with severe muscle pain, prevent client instructing server to add mild muscle pain
When exiting a raid with effect that has a timer, decrease timer value by amount of time spent in raid

* Updated nuget packages

* Fixed player scav not having correct HP values on limbs #642

* Remove unused record

* Revert "Updated nuget packages"

This reverts commit f6d9d46.

* Added `IMP mine detector` to reward and flea blacklist

* Fixed weapon builds not overwriting existing #654

Cleaned up `SaveWeaponBuild` and `SaveEquipmentBuild`

---------

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Co-authored-by: Chomp <27521899+chompDev@users.noreply.github.com>
Co-authored-by: Chomp <dev@dev.sp-tarkov.com>
Co-authored-by: CWX <CWXDEV@outlook.com>
Co-authored-by: sp-tarkov-bot <singleplayertarkov@gmail.com>
Co-authored-by: Cj <161484149+CJ-SPT@users.noreply.github.com>
Co-authored-by: Tyfon <29051038+tyfon7@users.noreply.github.com>
Co-authored-by: Archangel <jesse@archangel.wtf>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants