From ae407ff775638c6db18c2cc5556cb2b0f91d3309 Mon Sep 17 00:00:00 2001 From: Linard Arquint Date: Thu, 20 May 2021 12:46:38 +0200 Subject: [PATCH] fixes crash in LSP frontend if no port is provided --- src/main/scala/viper/server/ViperConfig.scala | 7 ++++++- .../viper/server/frontends/http/ViperHttpServer.scala | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/scala/viper/server/ViperConfig.scala b/src/main/scala/viper/server/ViperConfig.scala index afa5a6e4..b6d7c684 100644 --- a/src/main/scala/viper/server/ViperConfig.scala +++ b/src/main/scala/viper/server/ViperConfig.scala @@ -70,12 +70,17 @@ class ViperConfig(args: Seq[String]) extends ScallopConf(args) { + s"The port must be an integer in range [${ibm.Socket.MIN_PORT_NUMBER}-${ibm.Socket.MAX_PORT_NUMBER}]" + "If the option is omitted, an available port will be selected automatically."), validate = p => try { - ibm.Socket.available(p) + if (p != 0) { + ibm.Socket.available(p) + } else { + true + } } catch { case e: Exception => println(s"Invalid port $p: $e") false }, + default = Some(0), noshort = false, hidden = false) diff --git a/src/main/scala/viper/server/frontends/http/ViperHttpServer.scala b/src/main/scala/viper/server/frontends/http/ViperHttpServer.scala index fcd220d7..284c13d7 100644 --- a/src/main/scala/viper/server/frontends/http/ViperHttpServer.scala +++ b/src/main/scala/viper/server/frontends/http/ViperHttpServer.scala @@ -37,7 +37,9 @@ class ViperHttpServer(config: ViperConfig)(executor: VerificationExecutionContex ViperCache.initialize(logger.get, config.backendSpecificCache()) - port = config.port.getOrElse(ibm.Socket.findFreePort) + port = config.port.toOption + .flatMap(p => if (p == 0) None else Some(p)) // also search for a free port if the provided one is zero + .getOrElse(ibm.Socket.findFreePort) super.start(config.maximumActiveJobs()) println(s"ViperServer online at http://localhost:$port") }