gui: Add asserts to catch issue #343.

Sooner or later this issue will become important. But hopefully in the
meanwhile it should be rare.
diff --git a/gui/qubjson.cpp b/gui/qubjson.cpp
index 52a00a9..2d4138d 100644
--- a/gui/qubjson.cpp
+++ b/gui/qubjson.cpp
@@ -107,20 +107,33 @@
 }
 
 
-static size_t
+static int
 readSize(QDataStream &stream, Marker type)
 {
     switch (type) {
-    case MARKER_INT8:
-        return readInt8(stream);
+    case MARKER_INT8: {
+        int8_t size = readInt8(stream);
+        Q_ASSERT(size >= 0);
+        return size;
+    }
     case MARKER_UINT8:
         return readUInt8(stream);
-    case MARKER_INT16:
-        return readInt16(stream);
-    case MARKER_INT32:
-        return readInt32(stream);
-    case MARKER_INT64:
-        return readInt64(stream);
+    case MARKER_INT16: {
+        int16_t size = readInt16(stream);
+        Q_ASSERT(size >= 0);
+        return size;
+    }
+    case MARKER_INT32: {
+        int32_t size = readInt32(stream);
+        Q_ASSERT(size >= 0);
+        return size;
+    }
+    case MARKER_INT64: {
+        int64_t size = readInt64(stream);
+        Q_ASSERT(size >= 0);
+        Q_ASSERT_X(size <= INT_MAX, "qubjson::readSize", "size too large (https://github.com/apitrace/apitrace/issues/343)");
+        return size;
+    }
     default:
         Q_UNIMPLEMENTED();
     case MARKER_EOF:
@@ -139,7 +152,7 @@
 }
 
 
-static size_t
+static int
 readSize(QDataStream &stream)
 {
     Marker type = readMarker(stream);
@@ -148,7 +161,7 @@
 
 
 static QString
-readString(QDataStream &stream, size_t size)
+readString(QDataStream &stream, int size)
 {
     char *buf = new char [size];
     stream.readRawData(buf, size);
@@ -161,7 +174,7 @@
 static QString
 readString(QDataStream &stream)
 {
-    size_t size = readSize(stream);
+    int size = readSize(stream);
     return readString(stream, size);
 }
 
@@ -180,16 +193,16 @@
         Q_UNUSED(type);
         marker = readMarker(stream);
         Q_ASSERT(marker == MARKER_COUNT);
-        size_t count = readSize(stream);
+        int count = readSize(stream);
         QByteArray array(count, Qt::Uninitialized);
         int read = stream.readRawData(array.data(), count);
         Q_ASSERT(read == count);
         Q_UNUSED(read);
         return array;
     } else if (marker == MARKER_COUNT) {
-        size_t count = readSize(stream);
+        int count = readSize(stream);
         QVariantList array;
-        for (size_t i = 0; i < count; ++i) {
+        for (int i = 0; i < count; ++i) {
             marker = readMarker(stream);
             QVariant value = readVariant(stream, marker);
             array.append(value);
@@ -215,7 +228,7 @@
     Marker marker = readMarker(stream);
     while (marker != MARKER_OBJECT_END &&
            marker != MARKER_EOF) {
-        size_t nameSize = readSize(stream, marker);
+        int nameSize = readSize(stream, marker);
         QString name = readString(stream, nameSize);
         marker = readMarker(stream);
         QVariant value = readVariant(stream, marker);