diff --git a/java/org/brotli/dec/SynthTest.java b/java/org/brotli/dec/SynthTest.java
index d6be0c6..f6f5c94 100644
--- a/java/org/brotli/dec/SynthTest.java
+++ b/java/org/brotli/dec/SynthTest.java
@@ -8,6 +8,7 @@
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -2641,6 +2642,41 @@
   }
 
   @Test
+  public void testPeculiarWrap() {
+    byte[] compressed = {
+      (byte) 0x21, (byte) 0xfc, (byte) 0x1f, (byte) 0x00, (byte) 0x00, (byte) 0xa1, (byte) 0x12,
+      (byte) 0x82, (byte) 0x04, (byte) 0x60, (byte) 0x1d, (byte) 0x00, (byte) 0xca, (byte) 0xfe,
+      (byte) 0xba, (byte) 0xbe, (byte) 0xde, (byte) 0xad, (byte) 0xbe, (byte) 0xef, (byte) 0x21,
+      (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,
+      (byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,
+      (byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x91,
+      (byte) 0x61, (byte) 0x68, (byte) 0x64, (byte) 0x0c
+    };
+    checkSynth(
+    /*
+     * main_header: 10
+     * // See ZeroCostCommand
+     * metablock_header_begin: 0, 0, 2048, 0
+     * metablock_header_trivial_context
+     * huffman_simple: 0,1,256, 42
+     * huffman_simple: 0,1,704, 130
+     * huffman_simple: 0,1,64, 0
+     * // Metadata block; at least 8 bytes long
+     * bits: "0", "11", "0", "01", "00000111"
+     * byte_boundary
+     * bits: "11001010", "11111110", "10111010", "10111110"
+     * bits: "11011110", "10101101", "10111110", "11101111"
+     * metablock_header_easy: 3, 1
+     * command_easy: 0, "abc", 0
+     */
+      compressed,
+      true,
+      times(512, "left")
+      + "abc"
+    );
+  }
+
+  @Test
   public void testSimplePrefix() {
     byte[] compressed = {
       (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0xa0, (byte) 0xc3, (byte) 0xc4,
@@ -2712,9 +2748,9 @@
     );
   }
 
-/* DISABLED: Java decoder does not tolerate extra input after the brotli stream.
   @Test
   public void testSimplePrefixPlusExtraData() {
+    assumeTrue(false);
     byte[] compressed = {
       (byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0xa0, (byte) 0xc3, (byte) 0xc4,
       (byte) 0xc6, (byte) 0xc8, (byte) 0x02, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,
@@ -2722,12 +2758,23 @@
       (byte) 0x51, (byte) 0xa0, (byte) 0x1d, (byte) 0x55, (byte) 0xaa
     };
     checkSynth(
+    /*
+     * main_header
+     * metablock_header_begin: 1, 0, 4, 0
+     * metablock_header_trivial_context
+     * huffman_simple: 1,4,256, 97,98,99,100  // ASCII codes for a, b, c, d
+     * huffman_fixed: 704
+     * huffman_fixed: 64
+     * command_inscopy_easy: 4, 0
+     * command_literal_bits: 0, 10, 110, 111  // a, b, c, d
+     * byte_boundary
+     * bits: "01010101", "10101010"
+     */
       compressed,
       true,
       "abcd"
     );
   }
-*/
 
   @Test
   public void testStressReadDistanceExtraBits() {
diff --git a/js/decode_synth_test.js b/js/decode_synth_test.js
index 197e0ff..3b84545 100644
--- a/js/decode_synth_test.js
+++ b/js/decode_synth_test.js
@@ -1988,6 +1988,37 @@
   );
 },
 
+testPeculiarWrap() {
+  const compressed = [
+    0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00,
+    0xca, 0xfe, 0xba, 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03,
+    0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64, 0x0c
+  ];
+  checkSynth(
+    /*
+     * main_header: 10
+     * // See ZeroCostCommand
+     * metablock_header_begin: 0, 0, 2048, 0
+     * metablock_header_trivial_context
+     * huffman_simple: 0,1,256, 42
+     * huffman_simple: 0,1,704, 130
+     * huffman_simple: 0,1,64, 0
+     * // Metadata block; at least 8 bytes long
+     * bits: "0", "11", "0", "01", "00000111"
+     * byte_boundary
+     * bits: "11001010", "11111110", "10111010", "10111110"
+     * bits: "11011110", "10101101", "10111110", "11101111"
+     * metablock_header_easy: 3, 1
+     * command_easy: 0, "abc", 0
+     */
+    compressed,
+    true,
+    times(512, 'left')
+    + 'abc'
+  );
+},
+
 testSimplePrefix() {
   const compressed = [
     0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
@@ -2053,8 +2084,7 @@
 },
 
 testSimplePrefixPlusExtraData() {
-  // SKIP: JS decoder does not tolerate extra input after the brotli stream.
-  if ({}.toString() == {}) return;  // same as 'if (true) return'
+  if (pending) pending(); else return;
   const compressed = [
     0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
     0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,
diff --git a/js/decode_synth_test.ts b/js/decode_synth_test.ts
index 8a365cd..d5ba950 100644
--- a/js/decode_synth_test.ts
+++ b/js/decode_synth_test.ts
@@ -1978,6 +1978,37 @@
   );
 },
 
+testPeculiarWrap() {
+  const compressed = [
+    0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00,
+    0xca, 0xfe, 0xba, 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03,
+    0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64, 0x0c
+  ];
+  checkSynth(
+    /*
+     * main_header: 10
+     * // See ZeroCostCommand
+     * metablock_header_begin: 0, 0, 2048, 0
+     * metablock_header_trivial_context
+     * huffman_simple: 0,1,256, 42
+     * huffman_simple: 0,1,704, 130
+     * huffman_simple: 0,1,64, 0
+     * // Metadata block; at least 8 bytes long
+     * bits: "0", "11", "0", "01", "00000111"
+     * byte_boundary
+     * bits: "11001010", "11111110", "10111010", "10111110"
+     * bits: "11011110", "10101101", "10111110", "11101111"
+     * metablock_header_easy: 3, 1
+     * command_easy: 0, "abc", 0
+     */
+    compressed,
+    true,
+    times(512, 'left')
+    + 'abc'
+  );
+},
+
 testSimplePrefix() {
   const compressed = [
     0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
@@ -2043,8 +2074,7 @@
 },
 
 testSimplePrefixPlusExtraData() {
-  // SKIP: JS decoder does not tolerate extra input after the brotli stream.
-  if (2 * 2 === 4) return;
+  if (pending) pending(); else return;
   const compressed = [
     0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
     0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,
diff --git a/js/jasmine-polyfill.js b/js/jasmine-polyfill.js
index 69d7ec4..805c55f 100644
--- a/js/jasmine-polyfill.js
+++ b/js/jasmine-polyfill.js
@@ -3,6 +3,8 @@
 goog.require('goog.testing.jsunit');
 
 let test_case_;
+/** @type{?function(): void} */
+let pending = null;
 
 function describe(caseName, callback) {
   test_case_ = new goog.testing.TestCase(caseName);
