CFilePipe ReadString bug

 
bool CFilePipe::ReadString(string &value)
  {
//--- check for data
   if(WaitForRead(sizeof(int)))
     {
      ResetLastError();
      int size=FileReadInteger(m_handle);
      if(GetLastError()==0)
        {
         //--- check for data
         if(WaitForRead(size))
           {
            value=FileReadString(m_handle,size);
            return(size==StringLen(value));
           }
        }
     }
//--- failure
   return(false);
  }

return (size==StringLen(value)): this line is not correct

I am using Windows Chinese Simplified version, ANSI coding is GBK.

pipe server code is attached.

pipe server send integer 4, then send string "你好", pipe client ReadString sometimes returns false.

client code:

#include <Files/FilePipe.mqh>

CFilePipe ExtPipe;

void OnStart() {
    while (!IsStopped()) {
        if (ExtPipe.Open("\\\\.\\pipe\\mypipe", FILE_READ | FILE_WRITE | FILE_BIN) != INVALID_HANDLE) {
            break;
        }
        Sleep(500);
    }
    string str;
    if (!ExtPipe.ReadString(str)) {
        PrintFormat("Client: reading string failed");
        Print("Server: ", str, " received");
        return;
    }
    Print(str);
}

The output is not consistent:

sometimes:

Client: reading string failed

Server: 你好 received

sometimes:

你好er

client code:

#include <Files/FilePipe.mqh>

CFilePipe ExtPipe;

void OnStart() {
    while (!IsStopped()) {
        if (ExtPipe.Open("\\\\.\\pipe\\mypipe", FILE_READ | FILE_WRITE | FILE_BIN) != INVALID_HANDLE) {
            break;
        }
        Sleep(500);
    }
    string str;
    if (!ExtPipe.ReadString(str)) {
        PrintFormat("Client: reading string failed");
        Print(str);
        return;
    }
    Print(str);
}

Output:

Client: reading string failed

Server: 你好 received

Files: