Skip to content

Commit d1cbef6

Browse files
committed
fix #3052: NPE in UploadResource when filename casing differs
Case-insensitive FileName match in UploadResource — DB row may have different casing than the freshly-uploaded file (e.g., springfiles vs original-upload casing). Plus null-guards on the resource and contentFile lookups so a missing match logs gracefully instead of NPEing.
1 parent 952e937 commit d1cbef6

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

Zero-K.info/Controllers/MapsController.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -452,12 +452,18 @@ public ActionResult UploadResource(HttpPostedFileBase file, bool specialMap)
452452
using (var db = new ZkDataContext())
453453
{
454454
var resource = db.Resources.FirstOrDefault(x => x.InternalName == res.ResourceInfo.Name);
455-
var contentFile = resource.ResourceContentFiles.FirstOrDefault(x => x.FileName == file.FileName);
456-
contentFile.Links = $"{GlobalConst.BaseSiteUrl}/content/{subfolder}/{file.FileName}";
457-
contentFile.LinkCount = 1;
455+
// case-insensitive FileName match: DB row may have different casing than the
456+
// freshly-uploaded file (springfiles vs original-upload casing) — see issue #3052
457+
var contentFile = resource?.ResourceContentFiles.FirstOrDefault(
458+
x => string.Equals(x.FileName, file.FileName, StringComparison.OrdinalIgnoreCase));
459+
if (contentFile != null)
460+
{
461+
contentFile.Links = $"{GlobalConst.BaseSiteUrl}/content/{subfolder}/{file.FileName}";
462+
contentFile.LinkCount = 1;
463+
}
458464

459465
// tag as special if required
460-
if (res.Status == UnitSyncer.ResourceFileStatus.Registered && specialMap)
466+
if (resource != null && res.Status == UnitSyncer.ResourceFileStatus.Registered && specialMap)
461467
{
462468
resource.MapIsSpecial = true;
463469
}

0 commit comments

Comments
 (0)