Fix freeze and high CPU usage on invalid STDIN data, resolves #1620

This commit is contained in:
Janek Bevendorff 2018-03-04 23:56:06 +01:00
parent 386b78b896
commit 63a17f697c
3 changed files with 41 additions and 23 deletions

View file

@ -107,18 +107,26 @@ void NativeMessagingHost::readLength()
void NativeMessagingHost::readStdIn(const quint32 length)
{
if (length > 0) {
QByteArray arr;
arr.reserve(length);
if (length <= 0) {
return;
}
for (quint32 i = 0; i < length; ++i) {
arr.append(getchar());
}
QByteArray arr;
arr.reserve(length);
if (arr.length() > 0) {
QMutexLocker locker(&m_mutex);
sendReply(m_browserClients.readResponse(arr));
QMutexLocker locker(&m_mutex);
for (quint32 i = 0; i < length; ++i) {
int c = std::getchar();
if (c == EOF) {
// message ended prematurely, ignore it and return
return;
}
arr.append(static_cast<char>(c));
}
if (arr.length() > 0) {
sendReply(m_browserClients.readResponse(arr));
}
}