Skip to content

Commit ab53374

Browse files
committed
Improve fatal error messages with instructions
1 parent d8b6a39 commit ab53374

9 files changed

Lines changed: 132 additions & 139 deletions

File tree

.github/workflows/build.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ on:
77
- "!.*"
88
- "!.github/**/*"
99
- "!README.md"
10-
tags-ignore:
11-
- "**"
1210
workflow_dispatch:
1311

1412
jobs:

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ FUNC_BASE := freeVdfArray \
171171
dispatch \
172172
parseVersionString \
173173
scriptPathInvalid \
174+
reportVersionMismatch \
175+
reportIllegalVdf \
174176
debugMessage \
175177
zCPar_Symbol__GetNext_fix \
176178
createSymbol \

src/core.asm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ section .text
2626
%include "func/dispatch.asm"
2727
%include "func/parseVersionString.asm"
2828
%include "func/scriptPathInvalid.asm"
29+
%include "func/reportVersionMismatch.asm"
30+
%include "func/reportIllegalVdf.asm"
2931
%include "func/debugMessage.asm"
3032
%include "func/zCPar_Symbol__GetNext_fix.asm"
3133
%include "func/createSymbol.asm"

src/data/messages.asm

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,18 @@ NINJA_SYMBOL_FAILED db AUTHOR_PREFIX, ':NINJA: Failed to add symbol: ', 0
2828
NINJA_STRINGCOUNT_APPLY db AUTHOR_PREFIX, ':NINJA: Adjusting string count to ', 0
2929
NINJA_STRINGCOUNT_FAILED db AUTHOR_PREFIX, ':NINJA: Failed to adjust string count', 0
3030
NINJA_SKIPPING db AUTHOR_PREFIX, ':NINJA: Skipping : ', 0
31-
NINJA_OUTDATED_PATCH db AUTHOR_PREFIX, ':NINJA: Outdated VDF found (Ninja < 2)', 0
32-
NINJA_INVALID_PATCH db AUTHOR_PREFIX, ':NINJA: Illegal VDF: ', 0
33-
NINJA_MISSING_TOOLKIT db AUTHOR_PREFIX, ':NINJA: Missing dependency. Please install Toolkit', 0
3431
NINJA_VERIFY_PATH db AUTHOR_PREFIX, ':NINJA: Verifying file path', 0
3532
NINJA_VERIFY_VERSION db AUTHOR_PREFIX, ':NINJA: Verifying version', 0
3633
NINJA_COMPARE_VERSIONS db AUTHOR_PREFIX, ':NINJA: Comparing versions', 0
37-
NINJA_PARSER_FAILED db AUTHOR_PREFIX, ':NINJA: Version mismatch of ', 0
38-
NINJA_PARSER_FAILED_2 db '. ', 10, 13
34+
35+
; Fatal errors
36+
NINJA_INVALID_PATCH db 'Illegal VDF found "%s.VDF". ', 10, 13
37+
db 'Remove it from /Data/ to continue.', 0
38+
NINJA_MISSING_TOOLKIT db 'Missing dependency. Please install Toolkit. ', 10, 13
39+
db NINJA_WEBSITE, '/toolkit', 0
3940
NINJA_PATH_INVALID db 'Ikarus/LeGo must not be contained in any patch.', 0
40-
NINJA_LEGO_VER_ERROR db AUTHOR_PREFIX, ':NINJA: LeGo version invalid: ', 0
41-
NINJA_LEGO_END db 'No onset.', 0
42-
NINJA_LEGO_BMM db 'BMM incomplete.', 0
43-
NINJA_VERSION_INVALID db AUTHOR_PREFIX, ':NINJA: Version mismatch of %s. ', 10, 13
44-
db 'Game: %09d, Toolkit: %09d ', 10, 13
45-
db 'Please update Toolkit or report this to ', 10, 13
46-
db '<', NINJA_WEBSITE, '>', 0
41+
NINJA_LEGO_VER_ERROR db 'LeGo version invalid.', 0
42+
NINJA_VERSION_INVALID db 'Version mismatch of %s. ', 10, 13
43+
db 'Expected: %09d, Toolkit: %09d ', 10, 13
44+
db 'Please update Ninja and Toolkit or report this to ', 10, 13
45+
db NINJA_WEBSITE, 0

src/exec/createVdfArray.asm

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,14 @@ createVdfArray:
5050
add esp, 0x14
5151

5252
%if GOTHIC_BASE_VERSION == 1 || GOTHIC_BASE_VERSION == 2
53-
mov al, [SystemPack_version_info+g1g2(0xD,,,0xB)] ; Check for old Ninja system
53+
mov al, [SystemPack_version_info+g1g2(0xD,,,0xB)] ; Check for old Ninja system
5454
cmp al, 'N'
5555
jnz .registerConsole
5656

57-
sub esp, 0x14
58-
mov ecx, esp
59-
push NINJA_OUTDATED_PATCH
60-
call zSTRING__zSTRING
61-
addStack 4
62-
push ecx
63-
call zERROR__Fatal
57+
push char_NUL
58+
call ninja_reportIllegalVdf
6459
addStack 4
65-
; mov ecx, esp ; Never reached: Safe some space
66-
; call zSTRING___zSTRING
67-
add esp, 0x14
60+
; jmp .back ; Never reached: Safe some space
6861
%endif
6962

7063
.registerConsole:
@@ -332,20 +325,10 @@ createVdfArray:
332325
test eax, eax
333326
jz .findDirEnd ; This patch is based on Ninja: confirmed
334327

335-
sub esp, 0x14 ; Only allow patches with directory of same name
336-
mov ecx, esp
337-
push NINJA_INVALID_PATCH
338-
call zSTRING__zSTRING
339-
addStack 4
340-
push DWORD [esp+stackoffset+var_patchname]
341-
call zSTRING__operator_plusEq
328+
push DWORD [esp+stackoffset+var_patchname] ; Only allow patches with directory of same name
329+
call ninja_reportIllegalVdf
342330
addStack 4
343-
push ecx
344-
call zERROR__Fatal
345-
addStack 4
346-
; mov ecx, esp ; Never reached: Safe some space
347-
; call zSTRING___zSTRING
348-
add esp, 0x14
331+
; jmp .back ; Never reached: Safe some space
349332

350333
.dirLoopNext:
351334
mov ecx, [edi+VDFentry.type] ; Advance to next entry if not last one

src/exec/parse.asm

Lines changed: 16 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -287,25 +287,13 @@ parser_verify_ikarus_version:
287287
cmp ebx, IKARUS_VERSION
288288
jge .verifyFilePath
289289

290-
sub esp, 0x14
291-
mov ecx, esp
292-
push NINJA_PARSER_FAILED
293-
call zSTRING__zSTRING
294-
addStack 4
290+
push ebx
291+
push IKARUS_VERSION
295292
push char_ikarus
296-
call zSTRING__operator_plusEq
297-
addStack 4
298-
push NINJA_PARSER_FAILED_2
299-
call zSTRING__operator_plusEq
300-
addStack 4
301-
push eax
302-
call zERROR__Fatal
303-
addStack 4
304-
; mov ecx, esp ; Never reached: Safe some space
305-
; call zSTRING___zSTRING
306-
add esp, 0x14
293+
call ninja_reportVersionMismatch
294+
addStack 3*4
307295
verifyStackoffset g1g2(0x398,0x38C,0x3F0,0x3F0) + 0xC
308-
jmp .back
296+
; jmp .back ; Never reached: Safe some space
309297

310298
.verifyFilePath:
311299
push NINJA_PATH_IKARUS
@@ -333,40 +321,13 @@ parser_verify_ikarus_version:
333321
verifyStackoffset g1g2(0x398,0x38C,0x3F0,0x3F0) + 0xC
334322
jge .back
335323

336-
push edi
337-
mov edi, eax
338-
sub esp, 0x4
339-
push 0x200
340-
call operator_new
341-
add esp, 0x4
342-
push 0x1FF
343-
push 0x20
344-
push eax
345-
call _memset
346-
add esp, 0xC
347-
mov BYTE [eax+0x1FF], 0x0 ; Null-terminated
348-
sub esp, 0x14
349-
mov ecx, esp
350-
push eax
351-
call zSTRING__zSTRING
352-
addStack 4
353324
push ebx
354-
push edi
325+
push eax
355326
push char_ikarus
356-
push NINJA_VERSION_INVALID
357-
push ecx
358-
call zSTRING__Sprintf
359-
add esp, 0x14
360-
push esp
361-
call zERROR__Fatal
362-
addStack 4
363-
; mov ecx, esp ; Never reached: Safe some space
364-
; call zSTRING___zSTRING
365-
add esp, 0x14
366-
push esp
367-
call operator_delete
368-
add esp, 0x8
369-
pop edi
327+
call ninja_reportVersionMismatch
328+
addStack 3*4
329+
verifyStackoffset g1g2(0x398,0x38C,0x3F0,0x3F0) + 0xC
330+
; jmp .back ; Never reached: Safe some space
370331

371332
.skip:
372333
mov ebx, DWORD [esp+var_newvalue] ; New value of symbol (content)
@@ -489,14 +450,8 @@ parser_verify_lego_version:
489450
.invalidVersion:
490451
sub esp, 0x14
491452
mov ecx, esp
492-
push NINJA_PARSER_FAILED
453+
push NINJA_PATH_INVALID
493454
call zSTRING__zSTRING
494-
addStack 4
495-
push char_lego
496-
call zSTRING__operator_plusEq
497-
addStack 4
498-
push NINJA_PARSER_FAILED_2
499-
call zSTRING__operator_plusEq
500455
addStack 4
501456
push eax
502457
call zERROR__Fatal
@@ -505,7 +460,7 @@ parser_verify_lego_version:
505460
; call zSTRING___zSTRING
506461
add esp, 0x14
507462
verifyStackoffset g1g2(0x394,0x388,0x3EC,0x3EC) + 0x10
508-
jmp .back
463+
; jmp .back ; Never reached: Safe some space
509464

510465
.verifyFilePath:
511466
push NINJA_PATH_LEGO
@@ -540,41 +495,13 @@ parser_verify_lego_version:
540495
verifyStackoffset g1g2(0x394,0x388,0x3EC,0x3EC) + 0x10
541496
jge .back
542497

543-
push edi
544-
mov edi, eax
545-
sub esp, 0x4
546-
push 0x200
547-
call operator_new
548-
add esp, 0x4
549-
push 0x1FF
550-
push 0x20
551-
push eax
552-
call _memset
553-
add esp, 0xC
554-
mov BYTE [eax+0x1FF], 0x0 ; Null-terminated
555-
sub esp, 0x14
556-
mov ecx, esp
557498
push eax
558-
call zSTRING__zSTRING
559-
addStack 4
560-
push edi
561499
push ebx
562500
push char_lego
563-
push NINJA_VERSION_INVALID
564-
push ecx
565-
call zSTRING__Sprintf
566-
add esp, 0x14
567-
push esp
568-
call zERROR__Fatal
569-
addStack 4
570-
; mov ecx, esp ; Never reached: Safe some space
571-
; call zSTRING___zSTRING
572-
add esp, 0x14
573-
; push esp ; Never reached: Safe some space
574-
; call operator_delete
575-
; add esp, 0x4
576-
add esp, 0x4
577-
pop edi
501+
call ninja_reportVersionMismatch
502+
addStack 3*4
503+
verifyStackoffset g1g2(0x394,0x388,0x3EC,0x3EC) + 0x10
504+
; jmp .back ; Never reached: Safe some space
578505

579506
.skip:
580507
mov ecx, [ebp+zCPar_Symbol_content_offset]

src/func/parseVersionString.asm

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ ninja_parseVersionString:
2828
mov ecx, [esi+edi]
2929
cmp cl, 0
3030
verifyStackoffset 0x10+var_total
31-
jz .failed1
31+
jz .reportError
3232

3333
inc edi
3434
cmp cl, ' '
@@ -71,7 +71,7 @@ ninja_parseVersionString:
7171
.done:
7272
cmp edx, var_minor
7373
verifyStackoffset 0x10+var_total
74-
jg .failed2
74+
jg .reportError
7575
jz .foundOffset
7676

7777
.final:
@@ -85,21 +85,11 @@ ninja_parseVersionString:
8585
verifyStackoffset 0x10+var_total
8686
jmp .funcEnd
8787

88-
.failed1:
89-
mov esi, NINJA_LEGO_END
90-
jmp .reportError
91-
92-
.failed2:
93-
mov esi, NINJA_LEGO_BMM
94-
9588
.reportError:
9689
sub esp, 0x14
9790
mov ecx, esp
9891
push NINJA_LEGO_VER_ERROR
9992
call zSTRING__zSTRING
100-
addStack 4
101-
push esi
102-
call zSTRING__operator_plusEq
10393
addStack 4
10494
push eax
10595
call zERROR__Fatal

src/func/reportIllegalVdf.asm

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
; void __stdcall ninja_reportIllegalVdf(char *)
2+
; Report an illegal VDF archive and terminate (does not return)
3+
global ninja_reportIllegalVdf
4+
ninja_reportIllegalVdf:
5+
resetStackoffset
6+
%assign arg_1 +0x4 ; char *
7+
%assign arg_total 0x4
8+
9+
; pusha ; Function never returns: Safe some space
10+
11+
sub esp, 0x4
12+
push 0x200
13+
call operator_new
14+
add esp, 0x4
15+
push 0x1FF
16+
push 0x20
17+
push eax
18+
call _memset
19+
add esp, 0xC
20+
mov BYTE [eax+0x1FF], 0x0 ; Null-terminated
21+
sub esp, 0x14
22+
mov ecx, esp
23+
push eax
24+
call zSTRING__zSTRING
25+
addStack 4
26+
push DWORD [esp+stackoffset+arg_1]
27+
push NINJA_INVALID_PATCH
28+
push ecx
29+
call zSTRING__Sprintf
30+
add esp, 0xC
31+
push esp
32+
call zERROR__Fatal
33+
addStack 4
34+
; mov ecx, esp ; Never reached: Safe some space
35+
; call zSTRING___zSTRING
36+
add esp, 0x14
37+
; push esp ; Never reached: Safe some space
38+
; call operator_delete
39+
; add esp, 0x4
40+
add esp, 0x4
41+
42+
; popa ; Function never returns: Safe some space
43+
; ret arg_total
44+
verifyStackoffset

src/func/reportVersionMismatch.asm

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
; void __stdcall ninja_reportVersionMismatch(char *, int, int)
2+
; Report an invalid version and terminate (does not return)
3+
global ninja_reportVersionMismatch
4+
ninja_reportVersionMismatch:
5+
resetStackoffset
6+
%assign arg_1 +0x4 ; char *
7+
%assign arg_2 +0x8 ; int
8+
%assign arg_3 +0xC ; int
9+
%assign arg_total 0xC
10+
11+
; pusha ; Function never returns: Safe some space
12+
13+
sub esp, 0x4
14+
push 0x200
15+
call operator_new
16+
add esp, 0x4
17+
push 0x1FF
18+
push 0x20
19+
push eax
20+
call _memset
21+
add esp, 0xC
22+
mov BYTE [eax+0x1FF], 0x0 ; Null-terminated
23+
sub esp, 0x14
24+
mov ecx, esp
25+
push eax
26+
call zSTRING__zSTRING
27+
addStack 4
28+
push DWORD [esp+stackoffset+arg_3]
29+
push DWORD [esp+stackoffset+arg_2]
30+
push DWORD [esp+stackoffset+arg_1]
31+
push NINJA_VERSION_INVALID
32+
push ecx
33+
call zSTRING__Sprintf
34+
add esp, 0x14
35+
push esp
36+
call zERROR__Fatal
37+
addStack 4
38+
; mov ecx, esp ; Never reached: Safe some space
39+
; call zSTRING___zSTRING
40+
add esp, 0x14
41+
; push esp ; Never reached: Safe some space
42+
; call operator_delete
43+
; add esp, 0x4
44+
add esp, 0x4
45+
46+
; popa ; Function never returns: Safe some space
47+
; ret arg_total
48+
verifyStackoffset

0 commit comments

Comments
 (0)