Add more property-based tests and fix more bugs.

Change-Id: I8deb1a7d75078c037714541d8f6f656052c2476c
diff --git a/jgvariant-core/src/main/java/eu/mulk/jgvariant/core/Decoder.java b/jgvariant-core/src/main/java/eu/mulk/jgvariant/core/Decoder.java
index fcbb639..2121cfb 100644
--- a/jgvariant-core/src/main/java/eu/mulk/jgvariant/core/Decoder.java
+++ b/jgvariant-core/src/main/java/eu/mulk/jgvariant/core/Decoder.java
@@ -364,7 +364,7 @@
     // Determining the framing offset size requires trial and error.
     int framingOffsetSize;
     for (framingOffsetSize = 0;; framingOffsetSize = max(1, framingOffsetSize << 1)) {
-      if (elementsRelativeEnd + framingOffsetSize* framingOffsets.size() >= 1 << (8*framingOffsetSize)) {
+      if (elementsRelativeEnd + (long)framingOffsetSize * framingOffsets.size() >= 1L << (8*framingOffsetSize)) {
         continue;
       }
 
@@ -457,7 +457,7 @@
         }
 
         // Write the framing offsets.
-        int framingOffsetSize = computeFramingOffsetSize(byteWriter.position() - startOffset, framingOffsets);
+        int framingOffsetSize = max(1, computeFramingOffsetSize(byteWriter.position() - startOffset, framingOffsets));
         for (var framingOffset : framingOffsets) {
           byteWriter.writeIntN(framingOffset, framingOffsetSize);
         }