Skip to content

[SBB] SegFault during SBB validation of invalid config #1932

@Argmaster

Description

@Argmaster

Steps to Reproduce and Observed Behavior

Segmentation fault at address 0xffffffffffffffff
C:\Users\argma\dev\Cubyz5\src\server\terrain\structure_building_blocks.zig:318:30: 0x7ff661c391c9 in postResolutionChecks (Cubyz_zcu.obj)
  for(self.blueprints.items, 0..) |blueprints, blueprintIndex| {
                             ^
C:\Users\argma\dev\Cubyz5\src\server\terrain\structure_building_blocks.zig:379:57: 0x7ff661c38dab in registerSBB (Cubyz_zcu.obj)
 for(structureList.items) |sbb| sbb.postResolutionChecks();
                                                        ^
C:\Users\argma\dev\Cubyz5\src\assets.zig:605:21: 0x7ff661c3a8a9 in loadWorldAssets (Cubyz_zcu.obj)
 try sbb.registerSBB(&worldAssets.structureBuildingBlocks);
                    ^
C:\Users\argma\dev\Cubyz5\src\server\world.zig:533:34: 0x7ff661e7d7b0 in init (Cubyz_zcu.obj)
  try main.assets.loadWorldAssets(try std.fmt.allocPrint(arena.allocator, "{s}/saves/{s}/assets/", .{files.cubyzDirStr(), path}), self.blockPalette, self.itemPalette, self.toolPalette, self.biomePalette);
                                 ^
C:\Users\argma\dev\Cubyz5\src\server\server.zig:320:26: 0x7ff661e15330 in init (Cubyz_zcu.obj)
 world = ServerWorld.init(name, null) catch |err| {
                         ^
C:\Users\argma\dev\Cubyz5\src\server\server.zig:445:6: 0x7ff661d8e66f in start (Cubyz_zcu.obj)
 init(name, port);
     ^
C:\Users\argma\dev\Cubyz5\compiler\zig\lib\std\Thread.zig:510:13: 0x7ff661cf6a84 in callFn__anon_91057 (Cubyz_zcu.obj)
            @call(.auto, f, args);
            ^
C:\Users\argma\dev\Cubyz5\compiler\zig\lib\std\Thread.zig:623:30: 0x7ff661c5a6b4 in entryFn (Cubyz_zcu.obj)
                return callFn(f, self.fn_args);
                             ^
???:?:?: 0x7ffb66dae8d6 in ??? (KERNEL32.DLL)
???:?:?: 0x7ffb67b68d9b in ??? (ntdll.dll)

Seems to be caused by use of non-existent blueprints in configuration or sth like this. Discovered while working on #1930 with this invalid config:

.{
	.blueprints = .{
		.{.id = "cubyz:tree/mahogany/sapele/medium/stem/0"},
		.{.id = "cubyz:tree/mahogany/sapele/medium/stem/1"},
		.{.id = "cubyz:tree/mahogany/sapele/medium/full/0"},
		.{.id = "cubyz:tree/mahogany/sapele/medium/full/1"},
	},
	.children = .{
		.red = "cubyz:tree/mahogany/sapele/medium/branch/red",
		.green = "cubyz:tree/mahogany/sapele/medium/branch/green",
		.blue = "cubyz:tree/mahogany/sapele/medium/branch/blue",
		.white = "cubyz:tree/mahogany/sapele/medium/top",
		.yellow = "cubyz:tree/mahogany/deco",
	},
}

Config is invalid because none of blueprints mentioned exist.

SegFault while validating invalid SBB configuration is not an acceptable outcome, it should print a user friendly message instead.

latest.log

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugsomething isn't working in the intended waycontributor friendlythis issue is limited in scope and/or knowledge of Cubyz internals, good for newcomers

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions