zeroc-ice 3.7.2 → 3.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/ext/Config.h +4 -0
- data/ext/Operation.cpp +5 -5
- data/ext/Properties.cpp +1 -1
- data/ext/Proxy.cpp +16 -2
- data/ext/Types.cpp +45 -40
- data/ext/Util.cpp +1 -1
- data/ext/Util.h +10 -8
- data/ext/ice/cpp/include/Ice/Config.h +4 -0
- data/ext/ice/cpp/include/Ice/FactoryTableInit.h +1 -1
- data/ext/ice/cpp/include/Ice/IconvStringConverter.h +4 -3
- data/ext/ice/cpp/include/Ice/InputStream.h +4 -4
- data/ext/ice/cpp/include/Ice/Optional.h +11 -0
- data/ext/ice/cpp/include/Ice/OutgoingAsync.h +1 -1
- data/ext/ice/cpp/include/Ice/OutputStream.h +5 -5
- data/ext/ice/cpp/include/Ice/Proxy.h +17 -5
- data/ext/ice/cpp/include/Ice/StreamHelpers.h +1 -1
- data/ext/ice/cpp/include/Ice/Value.h +1 -1
- data/ext/ice/cpp/include/IceUtil/Atomic.h +1 -1
- data/ext/ice/cpp/include/IceUtil/Config.h +16 -6
- data/ext/ice/cpp/include/IceUtil/ConsoleUtil.h +4 -4
- data/ext/ice/cpp/include/IceUtil/Optional.h +8 -0
- data/ext/ice/cpp/include/IceUtil/OutputUtil.h +17 -14
- data/ext/ice/cpp/include/IceUtil/Random.h +1 -1
- data/ext/ice/cpp/include/IceUtil/ResourceConfig.h +2 -2
- data/ext/ice/cpp/include/IceUtil/ScannerConfig.h +6 -0
- data/ext/ice/cpp/include/IceUtil/StringConverter.h +1 -1
- data/ext/ice/cpp/include/generated/Ice/BuiltinSequences.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Communicator.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/CommunicatorF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Connection.h +33 -36
- data/ext/ice/cpp/include/generated/Ice/ConnectionF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Current.h +20 -21
- data/ext/ice/cpp/include/generated/Ice/Endpoint.h +24 -24
- data/ext/ice/cpp/include/generated/Ice/EndpointF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/EndpointTypes.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/FacetMap.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Identity.h +4 -5
- data/ext/ice/cpp/include/generated/Ice/ImplicitContext.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/ImplicitContextF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Instrumentation.h +15 -15
- data/ext/ice/cpp/include/generated/Ice/InstrumentationF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/LocalException.h +27 -93
- data/ext/ice/cpp/include/generated/Ice/Locator.h +27 -32
- data/ext/ice/cpp/include/generated/Ice/LocatorF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Logger.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/LoggerF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Metrics.h +75 -79
- data/ext/ice/cpp/include/generated/Ice/ObjectAdapter.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/ObjectAdapterF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/ObjectFactory.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Plugin.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/PluginF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Process.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/ProcessF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Properties.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/PropertiesAdmin.h +9 -9
- data/ext/ice/cpp/include/generated/Ice/PropertiesF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/RemoteLogger.h +9 -11
- data/ext/ice/cpp/include/generated/Ice/Router.h +22 -22
- data/ext/ice/cpp/include/generated/Ice/RouterF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/ServantLocator.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/ServantLocatorF.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/SliceChecksumDict.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/ValueFactory.h +3 -3
- data/ext/ice/cpp/include/generated/Ice/Version.h +15 -17
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfo.h +3 -3
- data/ext/ice/cpp/include/generated/IceSSL/ConnectionInfoF.h +3 -3
- data/ext/ice/cpp/include/generated/IceSSL/EndpointInfo.h +3 -3
- data/ext/ice/cpp/src/Ice/ArgVector.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Base64.cpp +11 -12
- data/ext/ice/cpp/src/Ice/BatchRequestQueue.cpp +1 -1
- data/ext/ice/cpp/src/Ice/Buffer.cpp +2 -2
- data/ext/ice/cpp/src/Ice/BuiltinSequences.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Communicator.cpp +3 -3
- data/ext/ice/cpp/src/Ice/CommunicatorF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/CommunicatorI.cpp +19 -0
- data/ext/ice/cpp/src/Ice/CommunicatorI.h +5 -0
- data/ext/ice/cpp/src/Ice/Connection.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ConnectionF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ConnectionI.cpp +31 -16
- data/ext/ice/cpp/src/Ice/Current.cpp +3 -3
- data/ext/ice/cpp/src/Ice/DispatchInterceptor.cpp +13 -0
- data/ext/ice/cpp/src/Ice/DynamicLibrary.cpp +6 -5
- data/ext/ice/cpp/src/Ice/Endpoint.cpp +3 -3
- data/ext/ice/cpp/src/Ice/EndpointF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/EndpointTypes.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Exception.cpp +5 -5
- data/ext/ice/cpp/src/Ice/FacetMap.cpp +3 -3
- data/ext/ice/cpp/src/Ice/HashUtil.h +1 -1
- data/ext/ice/cpp/src/Ice/IPEndpointI.cpp +12 -1
- data/ext/ice/cpp/src/Ice/Identity.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ImplicitContext.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ImplicitContextF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Incoming.cpp +2 -0
- data/ext/ice/cpp/src/Ice/Initialize.cpp +4 -3
- data/ext/ice/cpp/src/Ice/InputStream.cpp +19 -19
- data/ext/ice/cpp/src/Ice/Instance.cpp +28 -8
- data/ext/ice/cpp/src/Ice/Instrumentation.cpp +3 -3
- data/ext/ice/cpp/src/Ice/InstrumentationF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/LocalException.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Locator.cpp +7 -7
- data/ext/ice/cpp/src/Ice/LocatorF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Logger.cpp +3 -3
- data/ext/ice/cpp/src/Ice/LoggerAdminI.cpp +1 -7
- data/ext/ice/cpp/src/Ice/LoggerF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/LoggerI.cpp +6 -0
- data/ext/ice/cpp/src/Ice/Metrics.cpp +5 -5
- data/ext/ice/cpp/src/Ice/Network.cpp +23 -22
- data/ext/ice/cpp/src/Ice/Network.h +1 -1
- data/ext/ice/cpp/src/Ice/OSLogLoggerI.cpp +57 -0
- data/ext/ice/cpp/src/Ice/OSLogLoggerI.h +40 -0
- data/ext/ice/cpp/src/Ice/Object.cpp +9 -7
- data/ext/ice/cpp/src/Ice/ObjectAdapter.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ObjectAdapterF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.cpp +13 -1
- data/ext/ice/cpp/src/Ice/ObjectAdapterI.h +4 -0
- data/ext/ice/cpp/src/Ice/ObjectFactory.cpp +3 -3
- data/ext/ice/cpp/src/Ice/OutgoingAsync.cpp +1 -1
- data/ext/ice/cpp/src/Ice/OutputStream.cpp +24 -24
- data/ext/ice/cpp/src/Ice/Plugin.cpp +3 -3
- data/ext/ice/cpp/src/Ice/PluginF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Process.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ProcessF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Properties.cpp +3 -3
- data/ext/ice/cpp/src/Ice/PropertiesAdmin.cpp +4 -4
- data/ext/ice/cpp/src/Ice/PropertiesF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/PropertyNames.cpp +2 -1
- data/ext/ice/cpp/src/Ice/PropertyNames.h +1 -1
- data/ext/ice/cpp/src/Ice/Proxy.cpp +6 -0
- data/ext/ice/cpp/src/Ice/ProxyFactory.cpp +1 -1
- data/ext/ice/cpp/src/Ice/ReferenceFactory.cpp +1 -1
- data/ext/ice/cpp/src/Ice/RegisterPluginsInit.cpp +3 -2
- data/ext/ice/cpp/src/Ice/RemoteLogger.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Router.cpp +6 -6
- data/ext/ice/cpp/src/Ice/RouterF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/SHA1.cpp +2 -2
- data/ext/ice/cpp/src/Ice/Selector.cpp +18 -13
- data/ext/ice/cpp/src/Ice/ServantLocator.cpp +3 -3
- data/ext/ice/cpp/src/Ice/ServantLocatorF.cpp +3 -3
- data/ext/ice/cpp/src/Ice/SliceChecksumDict.cpp +3 -3
- data/ext/ice/cpp/src/Ice/StreamSocket.cpp +6 -6
- data/ext/ice/cpp/src/Ice/TcpAcceptor.cpp +6 -0
- data/ext/ice/cpp/src/Ice/TcpConnector.cpp +5 -0
- data/ext/ice/cpp/src/Ice/TcpEndpointI.cpp +5 -0
- data/ext/ice/cpp/src/Ice/TcpTransceiver.cpp +5 -0
- data/ext/ice/cpp/src/Ice/ThreadPool.cpp +63 -0
- data/ext/ice/cpp/src/Ice/ThreadPool.h +10 -2
- data/ext/ice/cpp/src/Ice/Timer.cpp +10 -0
- data/ext/ice/cpp/src/Ice/UdpEndpointI.cpp +11 -1
- data/ext/ice/cpp/src/Ice/UdpTransceiver.cpp +10 -2
- data/ext/ice/cpp/src/Ice/ValueFactory.cpp +3 -3
- data/ext/ice/cpp/src/Ice/Version.cpp +3 -3
- data/ext/ice/cpp/src/Ice/WSTransceiver.cpp +16 -15
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.cpp +3 -3
- data/ext/ice/cpp/src/IceDiscovery/IceDiscovery.h +3 -3
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.cpp +3 -3
- data/ext/ice/cpp/src/IceLocatorDiscovery/IceLocatorDiscovery.h +3 -3
- data/ext/ice/cpp/src/IceLocatorDiscovery/PluginI.cpp +37 -8
- data/ext/ice/cpp/src/IceSSL/CertificateI.cpp +3 -3
- data/ext/ice/cpp/src/IceSSL/ConnectionInfo.cpp +3 -3
- data/ext/ice/cpp/src/IceSSL/ConnectionInfoF.cpp +3 -3
- data/ext/ice/cpp/src/IceSSL/EndpointInfo.cpp +3 -3
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.cpp +4 -16
- data/ext/ice/cpp/src/IceSSL/OpenSSLEngine.h +0 -1
- data/ext/ice/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +40 -3
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.cpp +0 -7
- data/ext/ice/cpp/src/IceSSL/SChannelEngine.h +0 -2
- data/ext/ice/cpp/src/IceSSL/SChannelTransceiverI.cpp +18 -6
- data/ext/ice/cpp/src/IceSSL/SSLEngine.cpp +19 -7
- data/ext/ice/cpp/src/IceSSL/SSLEngine.h +2 -0
- data/ext/ice/cpp/src/IceSSL/SecureTransportCertificateI.cpp +32 -21
- data/ext/ice/cpp/src/IceSSL/SecureTransportTransceiverI.cpp +21 -6
- data/ext/ice/cpp/src/IceSSL/SecureTransportUtil.cpp +19 -16
- data/ext/ice/cpp/src/IceSSL/Util.cpp +11 -5
- data/ext/ice/cpp/src/IceUtil/FileUtil.cpp +1 -1
- data/ext/ice/cpp/src/IceUtil/Options.cpp +3 -3
- data/ext/ice/cpp/src/IceUtil/OutputUtil.cpp +40 -10
- data/ext/ice/cpp/src/IceUtil/Random.cpp +2 -2
- data/ext/ice/cpp/src/IceUtil/StringConverter.cpp +5 -5
- data/ext/ice/cpp/src/IceUtil/StringUtil.cpp +3 -3
- data/ext/ice/cpp/src/IceUtil/Time.cpp +3 -3
- data/ext/ice/cpp/src/IceUtil/UUID.cpp +5 -5
- data/ext/ice/cpp/src/IceUtil/UtilException.cpp +4 -4
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.cpp +13 -9
- data/ext/ice/cpp/src/Slice/CPlusPlusUtil.h +1 -1
- data/ext/ice/cpp/src/Slice/Grammar.cpp +8 -0
- data/ext/ice/cpp/src/Slice/JavaUtil.cpp +1 -2
- data/ext/ice/cpp/src/Slice/MD5I.cpp +8 -0
- data/ext/ice/cpp/src/Slice/Parser.cpp +60 -112
- data/ext/ice/cpp/src/Slice/Parser.h +27 -1
- data/ext/ice/cpp/src/Slice/Preprocessor.cpp +2 -1
- data/ext/ice/cpp/src/Slice/PythonUtil.cpp +10 -10
- data/ext/ice/cpp/src/Slice/RubyUtil.cpp +1 -1
- data/ext/ice/cpp/src/Slice/Scanner.cpp +8 -0
- data/ext/ice/cpp/src/Slice/StringLiteralUtil.cpp +11 -6
- data/ext/ice/mcpp/Makefile +2 -5
- data/ice.gemspec +1 -1
- data/lib/Glacier2/Metrics.rb +1 -1
- data/lib/Glacier2/PermissionsVerifier.rb +1 -1
- data/lib/Glacier2/PermissionsVerifierF.rb +1 -1
- data/lib/Glacier2/Router.rb +1 -1
- data/lib/Glacier2/RouterF.rb +1 -1
- data/lib/Glacier2/SSLInfo.rb +1 -1
- data/lib/Glacier2/Session.rb +1 -1
- data/lib/Ice/BuiltinSequences.rb +1 -1
- data/lib/Ice/Communicator.rb +1 -1
- data/lib/Ice/CommunicatorF.rb +1 -1
- data/lib/Ice/Connection.rb +1 -1
- data/lib/Ice/ConnectionF.rb +1 -1
- data/lib/Ice/Current.rb +1 -1
- data/lib/Ice/Endpoint.rb +1 -1
- data/lib/Ice/EndpointF.rb +1 -1
- data/lib/Ice/EndpointTypes.rb +1 -1
- data/lib/Ice/FacetMap.rb +1 -1
- data/lib/Ice/Identity.rb +1 -1
- data/lib/Ice/ImplicitContext.rb +1 -1
- data/lib/Ice/ImplicitContextF.rb +1 -1
- data/lib/Ice/Instrumentation.rb +1 -1
- data/lib/Ice/InstrumentationF.rb +1 -1
- data/lib/Ice/LocalException.rb +1 -1
- data/lib/Ice/Locator.rb +1 -1
- data/lib/Ice/LocatorF.rb +1 -1
- data/lib/Ice/Logger.rb +1 -1
- data/lib/Ice/LoggerF.rb +1 -1
- data/lib/Ice/Metrics.rb +1 -1
- data/lib/Ice/ObjectAdapter.rb +1 -1
- data/lib/Ice/ObjectAdapterF.rb +1 -1
- data/lib/Ice/ObjectFactory.rb +1 -1
- data/lib/Ice/Plugin.rb +1 -1
- data/lib/Ice/PluginF.rb +1 -1
- data/lib/Ice/Process.rb +1 -1
- data/lib/Ice/ProcessF.rb +1 -1
- data/lib/Ice/Properties.rb +1 -1
- data/lib/Ice/PropertiesAdmin.rb +1 -1
- data/lib/Ice/PropertiesF.rb +1 -1
- data/lib/Ice/RemoteLogger.rb +1 -1
- data/lib/Ice/Router.rb +1 -1
- data/lib/Ice/RouterF.rb +1 -1
- data/lib/Ice/ServantLocator.rb +1 -1
- data/lib/Ice/ServantLocatorF.rb +1 -1
- data/lib/Ice/SliceChecksumDict.rb +1 -1
- data/lib/Ice/ValueFactory.rb +1 -1
- data/lib/Ice/Version.rb +1 -1
- data/lib/IceBox/IceBox.rb +1 -1
- data/lib/IceGrid/Admin.rb +1 -1
- data/lib/IceGrid/Descriptor.rb +1 -1
- data/lib/IceGrid/Exception.rb +1 -1
- data/lib/IceGrid/FileParser.rb +1 -1
- data/lib/IceGrid/PluginFacade.rb +1 -1
- data/lib/IceGrid/Registry.rb +1 -1
- data/lib/IceGrid/Session.rb +1 -1
- data/lib/IceGrid/UserAccountMapper.rb +1 -1
- data/lib/IcePatch2/FileInfo.rb +1 -1
- data/lib/IcePatch2/FileServer.rb +1 -1
- data/lib/IceStorm/IceStorm.rb +1 -1
- data/lib/IceStorm/Metrics.rb +1 -1
- data/slice/Glacier2/Metrics.ice +1 -1
- data/slice/Ice/Communicator.ice +57 -25
- data/slice/Ice/Connection.ice +14 -14
- data/slice/Ice/Current.ice +1 -1
- data/slice/Ice/Endpoint.ice +6 -6
- data/slice/Ice/EndpointF.ice +1 -1
- data/slice/Ice/FacetMap.ice +1 -1
- data/slice/Ice/ImplicitContext.ice +6 -6
- data/slice/Ice/Instrumentation.ice +6 -6
- data/slice/Ice/Logger.ice +6 -6
- data/slice/Ice/Metrics.ice +12 -9
- data/slice/Ice/ObjectAdapter.ice +43 -31
- data/slice/Ice/ObjectFactory.ice +1 -1
- data/slice/Ice/Plugin.ice +2 -2
- data/slice/Ice/Properties.ice +10 -10
- data/slice/Ice/ServantLocator.ice +4 -2
- data/slice/Ice/ValueFactory.ice +3 -3
- data/slice/IceBT/EndpointInfo.ice +1 -1
- data/slice/IceGrid/PluginFacade.ice +4 -4
- data/slice/IceIAP/ConnectionInfo.ice +1 -1
- data/slice/IceIAP/EndpointInfo.ice +1 -1
- data/slice/IceSSL/ConnectionInfo.ice +3 -2
- data/slice/IceSSL/ConnectionInfoF.ice +1 -1
- data/slice/IceSSL/EndpointInfo.ice +1 -1
- data/slice/IceStorm/Metrics.ice +1 -1
- metadata +5 -3
|
@@ -120,7 +120,8 @@ checkTrustResult(SecTrustRef trust,
|
|
|
120
120
|
//
|
|
121
121
|
if(engine->getCheckCertName() && !host.empty())
|
|
122
122
|
{
|
|
123
|
-
UniqueRef<
|
|
123
|
+
UniqueRef<CFStringRef> hostref(toCFString(host));
|
|
124
|
+
UniqueRef<SecPolicyRef> policy(SecPolicyCreateSSL(false, hostref.get()));
|
|
124
125
|
UniqueRef<CFArrayRef> policies;
|
|
125
126
|
if((err = SecTrustCopyPolicies(trust, &policies.get())))
|
|
126
127
|
{
|
|
@@ -212,8 +213,10 @@ IceSSL::SecureTransport::TransceiverI::initialize(IceInternal::Buffer& readBuffe
|
|
|
212
213
|
//
|
|
213
214
|
if(_delegate->getNativeInfo()->fd() != INVALID_SOCKET)
|
|
214
215
|
{
|
|
215
|
-
_maxSendPacketSize =
|
|
216
|
-
|
|
216
|
+
_maxSendPacketSize =
|
|
217
|
+
static_cast<size_t>(std::max(512, IceInternal::getSendBufferSize(_delegate->getNativeInfo()->fd())));
|
|
218
|
+
_maxRecvPacketSize =
|
|
219
|
+
static_cast<size_t>(std::max(512, IceInternal::getRecvBufferSize(_delegate->getNativeInfo()->fd())));
|
|
217
220
|
}
|
|
218
221
|
else
|
|
219
222
|
{
|
|
@@ -239,6 +242,18 @@ IceSSL::SecureTransport::TransceiverI::initialize(IceInternal::Buffer& readBuffe
|
|
|
239
242
|
throw SecurityException(__FILE__, __LINE__, "IceSSL: setting SSL connection failed\n" +
|
|
240
243
|
sslErrorToString(err));
|
|
241
244
|
}
|
|
245
|
+
|
|
246
|
+
//
|
|
247
|
+
// Enable SNI
|
|
248
|
+
//
|
|
249
|
+
if(!_incoming && _engine->getServerNameIndication() && !_host.empty() && !IceInternal::isIpAddress(_host))
|
|
250
|
+
{
|
|
251
|
+
if((err = SSLSetPeerDomainName(_ssl.get(), _host.data(), _host.length())))
|
|
252
|
+
{
|
|
253
|
+
throw SecurityException(__FILE__, __LINE__, "IceSSL: setting SNI host failed `" + _host + "'\n" +
|
|
254
|
+
sslErrorToString(err));
|
|
255
|
+
}
|
|
256
|
+
}
|
|
242
257
|
}
|
|
243
258
|
|
|
244
259
|
SSLSessionState state;
|
|
@@ -289,7 +304,7 @@ IceSSL::SecureTransport::TransceiverI::initialize(IceInternal::Buffer& readBuffe
|
|
|
289
304
|
throw ProtocolException(__FILE__, __LINE__, os.str());
|
|
290
305
|
}
|
|
291
306
|
|
|
292
|
-
for(
|
|
307
|
+
for(CFIndex i = 0, count = SecTrustGetCertificateCount(_trust.get()); i < count; ++i)
|
|
293
308
|
{
|
|
294
309
|
SecCertificateRef cert = SecTrustGetCertificateAtIndex(_trust.get(), i);
|
|
295
310
|
CFRetain(cert);
|
|
@@ -583,7 +598,7 @@ IceSSL::SecureTransport::TransceiverI::writeRaw(const char* data, size_t* length
|
|
|
583
598
|
IceInternal::SocketOperation op = _delegate->write(buf);
|
|
584
599
|
if(op == IceInternal::SocketOperationWrite)
|
|
585
600
|
{
|
|
586
|
-
*length = buf.i - buf.b.begin();
|
|
601
|
+
*length = static_cast<size_t>(buf.i - buf.b.begin());
|
|
587
602
|
_tflags |= SSLWantWrite;
|
|
588
603
|
return errSSLWouldBlock;
|
|
589
604
|
}
|
|
@@ -616,7 +631,7 @@ IceSSL::SecureTransport::TransceiverI::readRaw(char* data, size_t* length) const
|
|
|
616
631
|
IceInternal::SocketOperation op = _delegate->read(buf);
|
|
617
632
|
if(op == IceInternal::SocketOperationRead)
|
|
618
633
|
{
|
|
619
|
-
*length = buf.i - buf.b.begin();
|
|
634
|
+
*length = static_cast<size_t>(buf.i - buf.b.begin());
|
|
620
635
|
_tflags |= SSLWantRead;
|
|
621
636
|
return errSSLWouldBlock;
|
|
622
637
|
}
|
|
@@ -36,12 +36,13 @@ readCertFile(const string& file)
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
is.seekg(0, is.end);
|
|
39
|
-
size_t size = is.tellg();
|
|
39
|
+
size_t size = static_cast<size_t>(is.tellg());
|
|
40
40
|
is.seekg(0, is.beg);
|
|
41
41
|
|
|
42
|
-
UniqueRef<CFMutableDataRef> data(CFDataCreateMutable(kCFAllocatorDefault, size));
|
|
43
|
-
CFDataSetLength(data.get(), size);
|
|
44
|
-
is.read(reinterpret_cast<char*>(CFDataGetMutableBytePtr(data.get())),
|
|
42
|
+
UniqueRef<CFMutableDataRef> data(CFDataCreateMutable(kCFAllocatorDefault, static_cast<CFIndex>(size)));
|
|
43
|
+
CFDataSetLength(data.get(), static_cast<CFIndex>(size));
|
|
44
|
+
is.read(reinterpret_cast<char*>(CFDataGetMutableBytePtr(data.get())),
|
|
45
|
+
static_cast<streamsize>(size));
|
|
45
46
|
if(!is.good())
|
|
46
47
|
{
|
|
47
48
|
throw CertificateReadException(__FILE__, __LINE__, "error reading file " + file);
|
|
@@ -112,7 +113,7 @@ isCA(SecCertificateRef cert)
|
|
|
112
113
|
if(property)
|
|
113
114
|
{
|
|
114
115
|
CFArrayRef propertyValues = static_cast<CFArrayRef>(CFDictionaryGetValue(property.get(), kSecPropertyKeyValue));
|
|
115
|
-
for(
|
|
116
|
+
for(CFIndex i = 0, size = CFArrayGetCount(propertyValues); i < size; ++i)
|
|
116
117
|
{
|
|
117
118
|
CFDictionaryRef dict = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(propertyValues, i));
|
|
118
119
|
CFStringRef label = static_cast<CFStringRef>(CFDictionaryGetValue(dict, kSecPropertyKeyLabel));
|
|
@@ -243,7 +244,7 @@ openKeychain(const std::string& path, const std::string& keychainPassword)
|
|
|
243
244
|
if(err == noErr)
|
|
244
245
|
{
|
|
245
246
|
const char* pass = keychainPassword.empty() ? 0 : keychainPassword.c_str();
|
|
246
|
-
if((err = SecKeychainUnlock(keychain.get(), keychainPassword.size(), pass, pass != 0)))
|
|
247
|
+
if((err = SecKeychainUnlock(keychain.get(), static_cast<UInt32>(keychainPassword.size()), pass, pass != 0)))
|
|
247
248
|
{
|
|
248
249
|
throw PluginInitializationException(__FILE__, __LINE__,
|
|
249
250
|
"IceSSL: unable to unlock keychain:\n" + sslErrorToString(err));
|
|
@@ -253,7 +254,8 @@ openKeychain(const std::string& path, const std::string& keychainPassword)
|
|
|
253
254
|
{
|
|
254
255
|
const char* pass = keychainPassword.empty() ? 0 : keychainPassword.c_str();
|
|
255
256
|
keychain.reset(0);
|
|
256
|
-
if((err = SecKeychainCreate(keychainPath.c_str(),
|
|
257
|
+
if((err = SecKeychainCreate(keychainPath.c_str(),
|
|
258
|
+
static_cast<UInt32>(keychainPassword.size()), pass, pass == 0, 0, &keychain.get())))
|
|
257
259
|
{
|
|
258
260
|
throw PluginInitializationException(__FILE__, __LINE__,
|
|
259
261
|
"IceSSL: unable to create keychain:\n" + sslErrorToString(err));
|
|
@@ -354,9 +356,9 @@ loadPrivateKey(const string& file, SecCertificateRef cert, SecKeychainRef keycha
|
|
|
354
356
|
// private key into the keychain and add the certificate.
|
|
355
357
|
//
|
|
356
358
|
UniqueRef<CFArrayRef> items(loadKeychainItems(file, kSecItemTypePrivateKey, keychain, password, prompt, retryMax));
|
|
357
|
-
|
|
359
|
+
CFIndex count = CFArrayGetCount(items.get());
|
|
358
360
|
UniqueRef<SecKeyRef> key;
|
|
359
|
-
for(
|
|
361
|
+
for(CFIndex i = 0; i < count; ++i)
|
|
360
362
|
{
|
|
361
363
|
SecKeychainItemRef itemRef =
|
|
362
364
|
static_cast<SecKeychainItemRef>(const_cast<void*>(CFArrayGetValueAtIndex(items.get(), 0)));
|
|
@@ -405,7 +407,7 @@ loadPrivateKey(const string& file, SecCertificateRef cert, SecKeychainRef keycha
|
|
|
405
407
|
SecKeychainAttribute attr;
|
|
406
408
|
attr.tag = kSecKeyLabel;
|
|
407
409
|
attr.data = const_cast<UInt8*>(CFDataGetBytePtr(hash.get()));
|
|
408
|
-
attr.length = CFDataGetLength(hash.get());
|
|
410
|
+
attr.length = static_cast<UInt32>(CFDataGetLength(hash.get()));
|
|
409
411
|
attributes.push_back(attr);
|
|
410
412
|
}
|
|
411
413
|
|
|
@@ -421,13 +423,13 @@ loadPrivateKey(const string& file, SecCertificateRef cert, SecKeychainRef keycha
|
|
|
421
423
|
SecKeychainAttribute attr;
|
|
422
424
|
attr.tag = kSecKeyPrintName;
|
|
423
425
|
attr.data = const_cast<char*>(label.c_str());
|
|
424
|
-
attr.length = label.size();
|
|
426
|
+
attr.length = static_cast<UInt32>(label.size());
|
|
425
427
|
attributes.push_back(attr);
|
|
426
428
|
}
|
|
427
429
|
|
|
428
430
|
SecKeychainAttributeList attrs;
|
|
429
431
|
attrs.attr = &attributes[0];
|
|
430
|
-
attrs.count = attributes.size();
|
|
432
|
+
attrs.count = static_cast<UInt32>(attributes.size());
|
|
431
433
|
SecKeychainItemModifyAttributesAndData(reinterpret_cast<SecKeychainItemRef>(key.get()), &attrs, 0, 0);
|
|
432
434
|
|
|
433
435
|
UniqueRef<SecIdentityRef> identity;
|
|
@@ -485,7 +487,8 @@ loadCerts(const string& file)
|
|
|
485
487
|
}
|
|
486
488
|
|
|
487
489
|
vector<unsigned char> data(IceInternal::Base64::decode(string(&buffer[startpos], size)));
|
|
488
|
-
UniqueRef<CFDataRef> certdata(CFDataCreate(kCFAllocatorDefault, &data[0],
|
|
490
|
+
UniqueRef<CFDataRef> certdata(CFDataCreate(kCFAllocatorDefault, &data[0],
|
|
491
|
+
static_cast<CFIndex>(data.size())));
|
|
489
492
|
UniqueRef<SecCertificateRef> cert(SecCertificateCreateWithData(0, certdata.get()));
|
|
490
493
|
if(!cert)
|
|
491
494
|
{
|
|
@@ -637,7 +640,7 @@ IceSSL::SecureTransport::loadCACertificates(const string& file)
|
|
|
637
640
|
#else
|
|
638
641
|
UniqueRef<CFArrayRef> items(loadKeychainItems(file, kSecItemTypeCertificate, 0, "", 0, 0));
|
|
639
642
|
UniqueRef<CFArrayRef> certificateAuthorities(CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks));
|
|
640
|
-
|
|
643
|
+
CFIndex count = CFArrayGetCount(items.get());
|
|
641
644
|
for(CFIndex i = 0; i < count; ++i)
|
|
642
645
|
{
|
|
643
646
|
SecCertificateRef cert =
|
|
@@ -760,7 +763,7 @@ IceSSL::SecureTransport::findCertificateChain(const std::string& keychainPath,
|
|
|
760
763
|
{
|
|
761
764
|
throw PluginInitializationException(__FILE__, __LINE__, "IceSSL: invalid value `" + value + "'");
|
|
762
765
|
}
|
|
763
|
-
UniqueRef<CFDataRef> v(CFDataCreate(kCFAllocatorDefault, &buffer[0], buffer.size()));
|
|
766
|
+
UniqueRef<CFDataRef> v(CFDataCreate(kCFAllocatorDefault, &buffer[0], static_cast<CFIndex>(buffer.size())));
|
|
764
767
|
CFDictionarySetValue(query.get(), field == "SUBJECTKEYID" ? kSecAttrSubjectKeyID : kSecAttrSerialNumber,
|
|
765
768
|
v.get());
|
|
766
769
|
valid = true;
|
|
@@ -800,7 +803,7 @@ IceSSL::SecureTransport::findCertificateChain(const std::string& keychainPath,
|
|
|
800
803
|
"IceSSL: error evaluating trust:\n" + sslErrorToString(err));
|
|
801
804
|
}
|
|
802
805
|
|
|
803
|
-
|
|
806
|
+
CFIndex chainLength = SecTrustGetCertificateCount(trust.get());
|
|
804
807
|
UniqueRef<CFArrayRef> items(CFArrayCreateMutable(kCFAllocatorDefault, chainLength, &kCFTypeArrayCallBacks));
|
|
805
808
|
for(int i = 0; i < chainLength; ++i)
|
|
806
809
|
{
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
|
|
21
21
|
#include <fstream>
|
|
22
22
|
|
|
23
|
+
#ifdef __IBMCPP__
|
|
24
|
+
// Work-around for xlC visibility bug
|
|
25
|
+
// See "ifstream::tellg visibility error" thread on IBM xlC forum
|
|
26
|
+
extern template class std::fpos<char*>;
|
|
27
|
+
#endif
|
|
28
|
+
|
|
23
29
|
using namespace std;
|
|
24
30
|
using namespace Ice;
|
|
25
31
|
using namespace IceInternal;
|
|
@@ -36,8 +42,8 @@ IceSSL::fromCFString(CFStringRef v)
|
|
|
36
42
|
{
|
|
37
43
|
CFIndex size = CFStringGetMaximumSizeForEncoding(CFStringGetLength(v), kCFStringEncodingUTF8);
|
|
38
44
|
vector<char> buffer;
|
|
39
|
-
buffer.resize(size + 1);
|
|
40
|
-
CFStringGetCString(v, &buffer[0], buffer.size(), kCFStringEncodingUTF8);
|
|
45
|
+
buffer.resize(static_cast<size_t>(size + 1));
|
|
46
|
+
CFStringGetCString(v, &buffer[0], static_cast<CFIndex>(buffer.size()), kCFStringEncodingUTF8);
|
|
41
47
|
s.assign(&buffer[0]);
|
|
42
48
|
}
|
|
43
49
|
return s;
|
|
@@ -118,12 +124,12 @@ IceSSL::readFile(const string& file, vector<char>& buffer)
|
|
|
118
124
|
}
|
|
119
125
|
|
|
120
126
|
is.seekg(0, is.end);
|
|
121
|
-
buffer.resize(static_cast<
|
|
127
|
+
buffer.resize(static_cast<size_t>(is.tellg()));
|
|
122
128
|
is.seekg(0, is.beg);
|
|
123
129
|
|
|
124
130
|
if(!buffer.empty())
|
|
125
131
|
{
|
|
126
|
-
is.read(&buffer[0], buffer.size());
|
|
132
|
+
is.read(&buffer[0], static_cast<streamsize>(buffer.size()));
|
|
127
133
|
if(!is.good())
|
|
128
134
|
{
|
|
129
135
|
throw CertificateReadException(__FILE__, __LINE__, "error reading file " + file);
|
|
@@ -134,7 +140,7 @@ IceSSL::readFile(const string& file, vector<char>& buffer)
|
|
|
134
140
|
bool
|
|
135
141
|
IceSSL::checkPath(const string& path, const string& defaultDir, bool dir, string& resolved)
|
|
136
142
|
{
|
|
137
|
-
#if defined(ICE_USE_SECURE_TRANSPORT_IOS)
|
|
143
|
+
#if defined(ICE_USE_SECURE_TRANSPORT_IOS) || defined(ICE_SWIFT)
|
|
138
144
|
CFBundleRef bundle = CFBundleGetMainBundle();
|
|
139
145
|
if(bundle)
|
|
140
146
|
{
|
|
@@ -431,7 +431,7 @@ IceUtilInternal::Options::split(const string& line)
|
|
|
431
431
|
j < i + 3 && j < l.size() && octalDigits.find_first_of(c = l[j]) != string::npos;
|
|
432
432
|
++j)
|
|
433
433
|
{
|
|
434
|
-
us = us * 8 + c - '0';
|
|
434
|
+
us = us * 8 + static_cast<unsigned short>(c - '0');
|
|
435
435
|
}
|
|
436
436
|
i = j - 1;
|
|
437
437
|
arg.push_back(static_cast<char>(us));
|
|
@@ -529,7 +529,7 @@ IceUtilInternal::Options::split(const string& line)
|
|
|
529
529
|
}
|
|
530
530
|
default:
|
|
531
531
|
{
|
|
532
|
-
assert(
|
|
532
|
+
assert(false); // Impossible parse state
|
|
533
533
|
break;
|
|
534
534
|
}
|
|
535
535
|
}
|
|
@@ -559,7 +559,7 @@ IceUtilInternal::Options::split(const string& line)
|
|
|
559
559
|
}
|
|
560
560
|
default:
|
|
561
561
|
{
|
|
562
|
-
assert(
|
|
562
|
+
assert(false); // Impossible parse state
|
|
563
563
|
break;
|
|
564
564
|
}
|
|
565
565
|
}
|
|
@@ -235,33 +235,43 @@ IceUtilInternal::OutputBase::operator!() const
|
|
|
235
235
|
// Output
|
|
236
236
|
// ----------------------------------------------------------------------
|
|
237
237
|
|
|
238
|
-
IceUtilInternal::Output::Output() :
|
|
238
|
+
IceUtilInternal::Output::Output(bool breakBeforeBlock, bool shortEmptyBlock) :
|
|
239
239
|
OutputBase(),
|
|
240
240
|
_blockStart("{"),
|
|
241
241
|
_blockEnd("}"),
|
|
242
|
-
_par(-1)
|
|
242
|
+
_par(-1),
|
|
243
|
+
_breakBeforeBlock(breakBeforeBlock),
|
|
244
|
+
_shortEmptyBlock(shortEmptyBlock),
|
|
245
|
+
_emptyBlock(false)
|
|
243
246
|
{
|
|
244
247
|
}
|
|
245
248
|
|
|
246
|
-
IceUtilInternal::Output::Output(ostream& os) :
|
|
249
|
+
IceUtilInternal::Output::Output(ostream& os, bool breakBeforeBlock, bool shortEmptyBlock) :
|
|
247
250
|
OutputBase(os),
|
|
248
251
|
_blockStart("{"),
|
|
249
252
|
_blockEnd("}"),
|
|
250
|
-
_par(-1)
|
|
253
|
+
_par(-1),
|
|
254
|
+
_breakBeforeBlock(breakBeforeBlock),
|
|
255
|
+
_shortEmptyBlock(shortEmptyBlock),
|
|
256
|
+
_emptyBlock(false)
|
|
251
257
|
{
|
|
252
258
|
}
|
|
253
259
|
|
|
254
|
-
IceUtilInternal::Output::Output(const char* s) :
|
|
260
|
+
IceUtilInternal::Output::Output(const char* s, bool breakBeforeBlock, bool shortEmptyBlock) :
|
|
255
261
|
OutputBase(s),
|
|
256
262
|
_blockStart("{"),
|
|
257
263
|
_blockEnd("}"),
|
|
258
|
-
_par(-1)
|
|
264
|
+
_par(-1),
|
|
265
|
+
_breakBeforeBlock(breakBeforeBlock),
|
|
266
|
+
_shortEmptyBlock(shortEmptyBlock),
|
|
267
|
+
_emptyBlock(false)
|
|
259
268
|
{
|
|
260
269
|
}
|
|
261
270
|
|
|
262
271
|
void
|
|
263
272
|
IceUtilInternal::Output::print(const string& s)
|
|
264
273
|
{
|
|
274
|
+
_emptyBlock = false;
|
|
265
275
|
if(_par >= 0)
|
|
266
276
|
{
|
|
267
277
|
if(++_par > 1) // No comma for the first parameter.
|
|
@@ -277,22 +287,41 @@ IceUtilInternal::Output::sb()
|
|
|
277
287
|
{
|
|
278
288
|
if(_blockStart.length())
|
|
279
289
|
{
|
|
280
|
-
|
|
290
|
+
if(_breakBeforeBlock)
|
|
291
|
+
{
|
|
292
|
+
newline();
|
|
293
|
+
}
|
|
294
|
+
else
|
|
295
|
+
{
|
|
296
|
+
_out << ' ';
|
|
297
|
+
}
|
|
281
298
|
_out << _blockStart;
|
|
282
299
|
}
|
|
283
300
|
++_pos;
|
|
284
301
|
inc();
|
|
285
302
|
_separator = false;
|
|
303
|
+
_emptyBlock = true;
|
|
286
304
|
}
|
|
287
305
|
|
|
288
306
|
void
|
|
289
307
|
IceUtilInternal::Output::eb()
|
|
290
308
|
{
|
|
291
309
|
dec();
|
|
292
|
-
if(
|
|
310
|
+
if(_emptyBlock && _shortEmptyBlock)
|
|
311
|
+
{
|
|
312
|
+
if(_blockEnd.length())
|
|
313
|
+
{
|
|
314
|
+
_separator = true;
|
|
315
|
+
_out << _blockEnd;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else
|
|
293
319
|
{
|
|
294
|
-
|
|
295
|
-
|
|
320
|
+
if(_blockEnd.length())
|
|
321
|
+
{
|
|
322
|
+
newline();
|
|
323
|
+
_out << _blockEnd;
|
|
324
|
+
}
|
|
296
325
|
}
|
|
297
326
|
--_pos;
|
|
298
327
|
}
|
|
@@ -300,6 +329,7 @@ IceUtilInternal::Output::eb()
|
|
|
300
329
|
void
|
|
301
330
|
IceUtilInternal::Output::spar(char c)
|
|
302
331
|
{
|
|
332
|
+
_emptyBlock = false;
|
|
303
333
|
_out << c;
|
|
304
334
|
_par = 0;
|
|
305
335
|
}
|
|
@@ -147,7 +147,7 @@ IceUtilInternal::generateRandom(char* buffer, size_t size)
|
|
|
147
147
|
}
|
|
148
148
|
else
|
|
149
149
|
{
|
|
150
|
-
index += bytesRead;
|
|
150
|
+
index += static_cast<size_t>(bytesRead);
|
|
151
151
|
reads++;
|
|
152
152
|
}
|
|
153
153
|
}
|
|
@@ -174,7 +174,7 @@ IceUtilInternal::random(int limit)
|
|
|
174
174
|
#endif
|
|
175
175
|
if(limit > 0)
|
|
176
176
|
{
|
|
177
|
-
r = r % limit;
|
|
177
|
+
r = r % static_cast<unsigned int>(limit);
|
|
178
178
|
}
|
|
179
179
|
return r;
|
|
180
180
|
}
|
|
@@ -92,7 +92,7 @@ public:
|
|
|
92
92
|
do
|
|
93
93
|
{
|
|
94
94
|
assert(factor <= 4);
|
|
95
|
-
const size_t chunkSize = std::max<size_t>((sourceEnd - sourceStart) * factor, 4);
|
|
95
|
+
const size_t chunkSize = std::max<size_t>(static_cast<size_t>(sourceEnd - sourceStart) * factor, 4);
|
|
96
96
|
++factor; // at the next round, we'll allocate more bytes per remaining source character
|
|
97
97
|
|
|
98
98
|
targetStart = reinterpret_cast<char*>(buffer.getMoreBytes(chunkSize, reinterpret_cast<Byte*>(targetNext)));
|
|
@@ -145,7 +145,7 @@ public:
|
|
|
145
145
|
|
|
146
146
|
virtual void fromUTF8(const Byte* sourceStart, const Byte* sourceEnd, wstring& target) const
|
|
147
147
|
{
|
|
148
|
-
const size_t sourceSize = sourceEnd - sourceStart;
|
|
148
|
+
const size_t sourceSize = static_cast<size_t>(sourceEnd - sourceStart);
|
|
149
149
|
|
|
150
150
|
if(sourceSize == 0)
|
|
151
151
|
{
|
|
@@ -173,7 +173,7 @@ public:
|
|
|
173
173
|
throw IllegalConversionException(__FILE__, __LINE__, "codecvt.in failure");
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
target.resize(targetNext - targetStart);
|
|
176
|
+
target.resize(static_cast<size_t>(targetNext - targetStart));
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
|
|
@@ -275,7 +275,7 @@ public:
|
|
|
275
275
|
size_t bytesUsed = 0;
|
|
276
276
|
if(firstUnused != 0)
|
|
277
277
|
{
|
|
278
|
-
bytesUsed = firstUnused - reinterpret_cast<const Byte*>(_buffer.data());
|
|
278
|
+
bytesUsed = static_cast<size_t>(firstUnused - reinterpret_cast<const Byte*>(_buffer.data()));
|
|
279
279
|
}
|
|
280
280
|
|
|
281
281
|
if(_buffer.size() < howMany + bytesUsed)
|
|
@@ -289,7 +289,7 @@ public:
|
|
|
289
289
|
void swap(string& other, const Byte* tail)
|
|
290
290
|
{
|
|
291
291
|
assert(tail >= reinterpret_cast<const Byte*>(_buffer.data()));
|
|
292
|
-
_buffer.resize(tail - reinterpret_cast<const Byte*>(_buffer.data()));
|
|
292
|
+
_buffer.resize(static_cast<size_t>(tail - reinterpret_cast<const Byte*>(_buffer.data())));
|
|
293
293
|
other.swap(_buffer);
|
|
294
294
|
}
|
|
295
295
|
|
|
@@ -22,11 +22,11 @@ toHexDigit(Byte b)
|
|
|
22
22
|
assert(b < 16);
|
|
23
23
|
if(b < 10)
|
|
24
24
|
{
|
|
25
|
-
return '0' + b;
|
|
25
|
+
return static_cast<char>('0' + b);
|
|
26
26
|
}
|
|
27
27
|
else
|
|
28
28
|
{
|
|
29
|
-
return 'a' - 10 + b;
|
|
29
|
+
return static_cast<char>('a' - 10 + b);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -289,7 +289,7 @@ checkChar(const string& s, string::size_type pos)
|
|
|
289
289
|
ostr << " has invalid ordinal value " << static_cast<int>(c);
|
|
290
290
|
throw IllegalArgumentException(__FILE__, __LINE__, ostr.str());
|
|
291
291
|
}
|
|
292
|
-
return c;
|
|
292
|
+
return static_cast<char>(c);
|
|
293
293
|
}
|
|
294
294
|
|
|
295
295
|
//
|