diff options
Diffstat (limited to 'src/qml/jit/qv4assemblercommon.cpp')
-rw-r--r-- | src/qml/jit/qv4assemblercommon.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/qml/jit/qv4assemblercommon.cpp b/src/qml/jit/qv4assemblercommon.cpp index 3938265019..2b33d0aa10 100644 --- a/src/qml/jit/qv4assemblercommon.cpp +++ b/src/qml/jit/qv4assemblercommon.cpp @@ -44,10 +44,20 @@ public: void vprintf(const char* format, va_list argList) override WTF_ATTRIBUTE_PRINTF(2, 0) { - const int written = qvsnprintf(buf.data(), buf.size(), format, argList); - if (written > 0) - dest->write(buf.constData(), written); - memset(buf.data(), 0, qMin(written, buf.size())); + const int printed = qvsnprintf(buf.data(), buf.size(), format, argList); + Q_ASSERT(printed <= buf.size()); + + qint64 written = 0; + while (written < printed) { + const qint64 result = dest->write(buf.constData() + written, printed - written); + if (result < 0) + break; + written += result; + } + + Q_ASSERT(written <= buf.size()); + Q_ASSERT(written >= 0); + memset(buf.data(), 0, size_t(written)); } void flush() override |