Windows が『192.168.00.1』を解釈できない真相が15年以上前からあるバグだと判明

Microsoft製 RDP 6.3クライアントは『192.168.00.1』を解釈できないことが発覚
真相が判明

rdp7
https://twitter.com/a1lic/status/846624969660366849/photo/1
『GetAddrInfoWから戻った後のraxの値、0x2AF9(11001)はWSAHOST_NOT_FOUNDなので、変な書き方のIPアドレスをちゃんと解釈できていない。』

|。・ω・) なんですと?

 char *hostname = "192.168.00.1";
 char *service = "http";
 struct addrinfo hints, *res0, *res;
 hints.ai_socktype = SOCK_STREAM;
 hints.ai_family = PF_UNSPEC;
 int err;
 int sock;
 WSADATA wsaData;
 WSAStartup(2 , &wsaData);
 memset(&hints, 0, sizeof(hints));
 getaddrinfo = (GETADDRINFO)GetProcAddress( module, "getaddrinfo" );
 if ((err = getaddrinfo(hostname, service, &hints, &res0)) != 0) {
        printf("error %d\n", err);
        return 1;
 }
 for (res=res0; res!=NULL; res=res->ai_next) {
   sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
   if (sock < 0) {
     continue;
   }
   printf("error %d.%d.%d.%d\n",(BYTE)res->ai_addr->sa_data[2],(BYTE)res->ai_addr->sa_data[3],(BYTE)res->ai_addr->sa_data[4],(BYTE)res->ai_addr->sa_data[5]);
 }
 return 0;

Windows 2000でも試してみた。

rdp6
ANSI版もダメっぽ

つまり、10年以上前からあるバグですね

おすすめ

2件のフィードバック

  1. 通りすがり より:

    その書き方って仕様には定まってなくて、八進数で解釈するか、十進数で解釈するかも実装によって違うものという認識だった
    まあ00の場合どうみても0だが

  2. 通りすがり より:

    その書き方って仕様には定まってなくて、八進数で解釈するか、十進数で解釈するかも実装によって違うものという認識だった
    まあ00の場合どうみても0だが

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です