Jump to content
Ralf Junker

OverbyteIcsWSocket.pas bug: PunyServerName filled with 8-bit data, even if it is a 16-bit UnicodeString

Recommended Posts

In OverbyteIcsWSocket.pas, PunyServerName is always filled with 8-bit data, even if it is a 16-bit UnicodeString on Unicode Delphis. This happens in OverbyteIcsWSocket.pas line 15916 (SVN 1469):

Move(DataExt[5], Ws.FCliHelloData.PunyServerName[1], Slen);

The line above works well with non Unicode Delphis, but copies incorrect data in Unicode enabled Delphis. Cause is the declaration of PunyServerName (line 3488):

TClientHelloData = record
    ServerName: String;
    PunyServerName: String; // <-- Problem here.
    ...

Later on, this results in incorrect conversion to ServerName. See that the OverbyteIcsSslWebServ demo outputs garbled SNI and Server Name instead of localhost:

HTTPS Server is waiting for connections
https://localhost/demo.html
HTTP Server is waiting for connections
http://localhost/demo.html
[10:17:36 127.0.0.1] SNI "潬慣桬獯t
Client Hello: Server Name: 潬慣桬獯t
[10:18:15 127.0.0.1] SNI "潬慣桬獯t
Client Hello: Server Name: 潬慣桬獯t

A quick remedy is to declare PunyServerName as AnsiString and work around the warning "OverbyteIcsWSocket.pas(15968): W1057 Implicit string cast from 'AnsiString' to 'string'", possibly be adding a typecast.

TClientHelloData = record
    ServerName: String;
    PunyServerName: AnsiString; // <-- 8-bit string, even in Unicode Delphis.
    ...

Ralf

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×