|
@@ -483,7 +483,15 @@ IOServiceImpl::IOServiceImpl(AuthSrv* auth_server, const char& port,
|
|
|
uint16_t portnum;
|
|
|
|
|
|
try {
|
|
|
- portnum = boost::lexical_cast<uint16_t>(&port);
|
|
|
+ // XXX: SunStudio with stlport4 doesn't reject some invalid
|
|
|
+ // representation such as "-1" by lexical_cast<uint16_t>, so
|
|
|
+ // we convert it into a signed integer of a larger size and perform
|
|
|
+ // range check ourselves.
|
|
|
+ int32_t portnum32 = boost::lexical_cast<int32_t>(&port);
|
|
|
+ if (portnum32 < 0 || portnum32 > 65535) {
|
|
|
+ isc_throw(IOError, "Invalid port number '" << &port);
|
|
|
+ }
|
|
|
+ portnum = portnum32;
|
|
|
} catch (const boost::bad_lexical_cast& ex) {
|
|
|
isc_throw(IOError, "Invalid port number '" << &port << "': " <<
|
|
|
ex.what());
|