@@ -110,7 +110,8 @@ class AuthenticationServer {
110110 return
111111 }
112112
113- _socket? . writeAndRead ( " G \t \( _authInfo!. game) " , tag: AuthSocketState . game. rawValue)
113+ let upperGame = _authInfo!. game. uppercased ( )
114+ _socket? . writeAndRead ( " G \t \( upperGame) " , tag: AuthSocketState . game. rawValue)
114115
115116 case . game:
116117 _socket? . writeAndRead ( " C " , tag: AuthSocketState . characterlist. rawValue)
@@ -147,7 +148,16 @@ class AuthenticationServer {
147148 return
148149 }
149150
150- let info = getConnection ( str)
151+ if str. contains ( " PROBLEM " ) || !str. contains ( " GAMECODE " ) {
152+ disconnectWithError ( " unable to connect, check connection options " )
153+ return
154+ }
155+
156+ guard let info = getConnection ( str) else {
157+ disconnectWithError ( " unable to connect, check connection options " )
158+ return
159+ }
160+
151161 _socket? . disconnect ( )
152162 _callback ? ( . success( info) )
153163 }
@@ -181,17 +191,30 @@ class AuthenticationServer {
181191 return Data ( hexString: hexHash)
182192 }
183193
184- func getConnection( _ input: String ) -> GameConnectionInfo {
194+ func getConnection( _ input: String ) -> GameConnectionInfo ? {
185195 let game = getData ( input, pattern: " GAMECODE=( \\ S+) " )
186196 let key = getData ( input, pattern: " KEY=( \\ w+) " )
187197 let host = getData ( input, pattern: " GAMEHOST=( \\ S+) " )
188198 let port = getData ( input, pattern: " GAMEPORT=( \\ d+) " )
189- let portNumber = UInt16 ( port) !
190- return GameConnectionInfo ( game: game, key: key, host: host, port: portNumber)
199+ let portNumber = UInt16 ( port ?? " " )
200+
201+ if game == nil || key == nil || host == nil || port == nil || portNumber == nil {
202+ return nil
203+ }
204+
205+ return GameConnectionInfo ( game: game ?? " " , key: key ?? " " , host: host ?? " " , port: portNumber ?? 0 )
191206 }
192207
193- func getData( _ input: String , pattern: String ) -> String {
194- let range = try ! Regex ( pattern) . matches ( input) [ 1 ]
195- return String ( input [ range] )
208+ func getData( _ input: String , pattern: String ) -> String ? {
209+ do {
210+ let matches = try Regex ( pattern) . matches ( input)
211+ guard matches. count > 1 else {
212+ return nil
213+ }
214+ let range = matches [ 1 ]
215+ return String ( input [ range] )
216+ } catch {
217+ return nil
218+ }
196219 }
197220}
0 commit comments