Skip to content

Commit 758f239

Browse files
committed
Exception handling
- Message is shown when a the selected encryption type does not match the specified maple version - Null exception upon disposing wz file where the underlying reader was never initialized
1 parent 30b681d commit 758f239

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

MapleLib/WzLib/WzFile.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public override WzObjectType ObjectType
9090

9191
public override void Dispose()
9292
{
93-
if (wzDir.reader == null) return;
93+
if (wzDir == null || wzDir.reader == null) return;
9494
wzDir.reader.Close();
9595
Header = null;
9696
path = null;

WzVisualizer/GUI/Form1.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ private void LoadWzData(WzMapleVersion mapleVersion, string mapleDirectory)
287287
break;
288288
case 0: // Equips
289289
{
290-
LoadWzFileIfAbsent(ref _CharacterWZ, mapleDirectory + "/Character", mapleVersion);
290+
if (!LoadWzFileIfAbsent(ref _CharacterWZ, mapleDirectory + "/Character", mapleVersion)) return;
291291
DataGridView dGrid = (DataGridView)TabEquips.SelectedTab.Controls[0];
292292
dGrid.Rows.Clear();
293293
List<WzImage> children = _CharacterWZ.WzDirectory.GetChildImages();
@@ -365,7 +365,7 @@ private void LoadWzData(WzMapleVersion mapleVersion, string mapleDirectory)
365365
case 3: // Etc
366366
case 4: // Cash
367367
{
368-
LoadWzFileIfAbsent(ref _ItemWZ, mapleDirectory + "/Item", mapleVersion);
368+
if (!LoadWzFileIfAbsent(ref _ItemWZ, mapleDirectory + "/Item", mapleVersion)) return;
369369
if (selected_root == 1)
370370
((DataGridView)TabUse.SelectedTab.Controls[0]).Rows.Clear();
371371
else if (selected_root == 2)
@@ -416,7 +416,7 @@ private void LoadWzData(WzMapleVersion mapleVersion, string mapleDirectory)
416416
}
417417
case 5: // Map
418418
{
419-
LoadWzFileIfAbsent(ref _MapWZ, mapleDirectory + "/Map", mapleVersion);
419+
if (!LoadWzFileIfAbsent(ref _MapWZ, mapleDirectory + "/Map", mapleVersion)) return;
420420
GridMaps.Rows.Clear();
421421

422422
List<WzImage> children = _MapWZ.WzDirectory.GetChildImages();
@@ -439,7 +439,7 @@ private void LoadWzData(WzMapleVersion mapleVersion, string mapleDirectory)
439439
}
440440
case 6: // Mob
441441
{
442-
LoadWzFileIfAbsent(ref _MobWZ, mapleDirectory + "/Mob", mapleVersion);
442+
if (!LoadWzFileIfAbsent(ref _MobWZ, mapleDirectory + "/Mob", mapleVersion)) return;
443443
GridMobs.Rows.Clear();
444444

445445
List<WzImage> children = _MobWZ.WzDirectory.GetChildImages();
@@ -455,7 +455,7 @@ private void LoadWzData(WzMapleVersion mapleVersion, string mapleDirectory)
455455
}
456456
case 7: // Skills
457457
{
458-
LoadWzFileIfAbsent(ref _SkillWZ, mapleDirectory + "/Skill", mapleVersion);
458+
if (!LoadWzFileIfAbsent(ref _SkillWZ, mapleDirectory + "/Skill", mapleVersion)) return;
459459
GridSkills.Rows.Clear();
460460

461461
List<WzImage> children = _SkillWZ.WzDirectory.GetChildImages();
@@ -479,7 +479,7 @@ private void LoadWzData(WzMapleVersion mapleVersion, string mapleDirectory)
479479
}
480480
case 8: // NPCs
481481
{
482-
LoadWzFileIfAbsent(ref _NpcWZ, mapleDirectory + "/Npc", mapleVersion);
482+
if (!LoadWzFileIfAbsent(ref _NpcWZ, mapleDirectory + "/Npc", mapleVersion)) return;
483483
GridNPCs.Rows.Clear();
484484

485485
List<WzImage> children = _NpcWZ.WzDirectory.GetChildImages();
@@ -494,20 +494,28 @@ private void LoadWzData(WzMapleVersion mapleVersion, string mapleDirectory)
494494
}
495495
}
496496

497-
private void LoadWzFileIfAbsent(ref WzFile wzFile, string fileName, WzMapleVersion mapleVersion)
497+
private bool LoadWzFileIfAbsent(ref WzFile wzFile, string fileName, WzMapleVersion mapleVersion)
498498
{
499-
if (wzFile != null) return;
499+
if (wzFile != null) return false;
500500
if (File.Exists(fileName + ".wz"))
501501
{
502-
wzFile = new WzFile(fileName + ".wz", (short) MapleVersion.Value, mapleVersion);
503-
wzFile.ParseWzFile();
502+
wzFile = new WzFile(fileName + ".wz", (short)MapleVersion.Value, mapleVersion);
503+
try {
504+
wzFile.ParseWzFile();
505+
return true;
506+
} catch (EndOfStreamException)
507+
{
508+
MessageBox.Show("Failed to parse the WZ file. Perhaps an invalid WZ version was specified?", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
509+
}
504510
} else
505511
{ // KMS
506512
wzFile = new WzFile(fileName, mapleVersion);
507513
WzDirectory dir = new WzDirectory(fileName, wzFile);
508514
wzFile.WzDirectory = dir;
509515
RecursivelyLoadDirectory(dir, fileName, mapleVersion);
516+
return true;
510517
}
518+
return false;
511519
}
512520

513521
private void RecursivelyLoadDirectory(WzDirectory dir, string directoryPath, WzMapleVersion mapleVersion)

0 commit comments

Comments
 (0)