@@ -25,10 +25,18 @@ def __init__(self, config_file: str):
2525 self .__running = False
2626
2727 # Initialize the bus dispatcher (will run in a separate thread)
28- self .__bus_dispatcher = BusDispatcher (
29- self .__config .get ("bus.memory_size" , default = 8 , set_if_not_found = True ),
30- self .__config .get ("bus.max_string_length" , default = 8192 , set_if_not_found = True ) # default of 8KB
31- )
28+
29+ mem_size = self .__config .get ("bus.memory_size" , default = 8 , set_if_not_found = True )
30+ max_str_len = self .__config .get ("bus.max_string_length" , default = 8192 , set_if_not_found = True ) # default of 8KB
31+
32+ if not isinstance (mem_size , int ) or mem_size <= 0 :
33+ Logger .error (f"Invalid bus memory size: { mem_size } . Must be a positive integer. Using default of 8MB." )
34+ raise ValueError ("Invalid bus memory size in configuration." )
35+ if not isinstance (max_str_len , int ) or max_str_len <= 0 :
36+ Logger .error (f"Invalid bus max string length: { max_str_len } . Must be a positive integer. Using default of 8192 bytes." )
37+ raise ValueError ("Invalid bus max string length in configuration." )
38+
39+ self .__bus_dispatcher = BusDispatcher ( mem_size , max_str_len )
3240 self .__bus_dispatcher_thread = th .Thread (
3341 target = self .__bus_dispatcher .mainloop ,
3442 daemon = True ,
@@ -38,7 +46,7 @@ def __init__(self, config_file: str):
3846 # Initialize the bus to communicate with modules through the dispatcher
3947 bus_data = self .__bus_dispatcher .get_bus_data ("core" )
4048 self .__bus = Bus (bus_data )
41- self ._srv_config = JSONConfig (self .__config .get ("server_config_path" ))
49+ self ._srv_config = JSONConfig (str ( self .__config .get ("server_config_path" ) ))
4250
4351 self .__ui_processes : Dict [str , mp .Process ] = {}
4452 self .__mc_servers : Dict [str , mp .Process ] = {}
@@ -98,7 +106,7 @@ def __start_user_interfaces(self):
98106 Initializes and start user interface modules based on the configuration.
99107 This method is called when the core is started.
100108 """
101- to_load : dict [str , dict [str , Any ]] = self .__config .get ("user_interface_modules" )
109+ to_load : dict [str , dict [str , Any ]] = self .__config .get ("user_interface_modules" ) #type: ignore
102110 for module_type , config in to_load .items ():
103111 Logger .info (f"Initializing user interface module { config ['name' ]} of type { module_type } ..." )
104112 if module_type not in UserInterfaceModules :
@@ -175,11 +183,26 @@ def __start_server(self, server_name: str):
175183 try :
176184 server_type = self ._srv_config .get (f"{ server_name } .type" )
177185 server_path = self ._srv_config .get (f"{ server_name } .path" )
186+
187+ if not isinstance (server_type , str ) or server_type not in McServersModules :
188+ Logger .error (f"Invalid or unknown server type for server { server_name } . Cannot start server." )
189+ return
190+ if not isinstance (server_path , str ) or not os .path .exists (server_path ):
191+ Logger .error (f"Invalid or non-existent server path for server { server_name } . Cannot start server." )
192+ return
178193
179194 Server = McServersModules [server_type ]
180195 bus_data = self .__bus_dispatcher .get_bus_data (server_name )
181196 ram = self ._srv_config .get (f"{ server_name } .ram" , default = 1024 , set_if_not_found = True )
182- mc_version = Version .from_string (self ._srv_config .get (f"{ server_name } .mc_version" ))
197+ if not isinstance (ram , int ) or ram <= 0 :
198+ Logger .error (f"Invalid RAM value for server { server_name } . Cannot start server." )
199+ return
200+ mc_version_raw = self ._srv_config .get (f"{ server_name } .mc_version" )
201+ if not isinstance (mc_version_raw , str ):
202+ Logger .error (f"Invalid Minecraft version for server { server_name } . Cannot start server." )
203+ return
204+ mc_version = Version .from_string (mc_version_raw )
205+
183206 def __start_mc_server ():
184207 srv = Server (server_name , server_path , ram , mc_version , bus_data )
185208 srv .start ()
@@ -290,7 +313,7 @@ def __get_server_status(self, server_name: str) -> ServerStatus:
290313 """
291314 if server_name not in self ._srv_config :
292315 Logger .error (f"Server { server_name } not found." )
293- return False
316+ return ServerStatus . STOPPED
294317
295318 pinged : str = self .__bus .trigger (
296319 Events ['SERVER.PING' ],
@@ -303,8 +326,11 @@ def __get_mc_dirs(self) -> List[str]:
303326 try :
304327 data = []
305328 Logger .trace ("Fetching Minecraft server directories from configuration." )
306- for i in range (len (self .__config .get ("minecraft_servers_dirs" , []))):
329+ for i in range (len (self .__config .get ("minecraft_servers_dirs" , []))): # type: ignore
307330 dir_path = self .__config .get (f"minecraft_servers_dirs.{ i } " )
331+ if not isinstance (dir_path , str ):
332+ Logger .warning (f"Invalid directory path at index { i } : { dir_path } . Skipping." )
333+ continue
308334 data .append (os .path .normpath (dir_path ))
309335 Logger .trace (f"Found Minecraft server directories: { data } " )
310336 return data
0 commit comments