diff --git a/library/Rattletrap/Attribute/Product.hs b/library/Rattletrap/Attribute/Product.hs
--- a/library/Rattletrap/Attribute/Product.hs
+++ b/library/Rattletrap/Attribute/Product.hs
@@ -37,7 +37,7 @@
           x <- BinaryBit.getWord32be 31
           pure (Just (Right x))
         else do
-          x <- getCompressedWord 14
+          x <- getCompressedWord 13
           pure (Just (Left x))
       "TAGame.ProductAttribute_UserColor_TA" -> do
         hasValue <- BinaryBit.getBool
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: rattletrap
-version: 3.1.1
+version: 3.1.2
 
 category: Game
 description: Rattletrap parses and generates Rocket League replays.
diff --git a/rattletrap.cabal b/rattletrap.cabal
--- a/rattletrap.cabal
+++ b/rattletrap.cabal
@@ -1,9 +1,11 @@
--- This file has been generated from package.yaml by hpack version 0.17.1.
+-- This file has been generated from package.yaml by hpack version 0.20.0.
 --
 -- see: https://github.com/sol/hpack
+--
+-- hash: ffc648678c84d8942a93a5168812a9a02db2b7471f0f42a0576f8409235cc6cd
 
 name:           rattletrap
-version:        3.1.1
+version:        3.1.2
 synopsis:       Parse and generate Rocket League replays.
 description:    Rattletrap parses and generates Rocket League replays.
 category:       Game
@@ -74,6 +76,7 @@
     replays/D428F81646A98C25902CE988AE5C14C8.replay
     replays/D7FB197A451D69075A0C99A2F49A4053.replay
     replays/DCB3A6B94A9DBE46FDE5EAA9B012F6C8.replay
+    replays/DE56B1B146687EA2E62E31A37A08C8EB.replay
     replays/EAE311E84BA35B590A6FDBA6DD4F2FEB.replay
     replays/EAE8DADA4BB2DC5422792C9B4A67392D.replay
     replays/F299F176491554B11E34AB91CA76B2CE.replay
@@ -92,19 +95,19 @@
   default-extensions: Strict
   ghc-options: -Wall
   build-depends:
-      aeson >= 1.2.3 && < 1.3
-    , base >= 4.10.1 && < 4.11
-    , bimap >= 0.3.3 && < 0.4
-    , binary >= 0.8.5 && < 0.9
-    , binary-bits >= 0.5 && < 0.6
-    , bytestring >= 0.10.8 && < 0.11
-    , containers >= 0.5.10 && < 0.6
-    , data-binary-ieee754 >= 0.4.4 && < 0.5
-    , http-client >= 0.5.7 && < 0.6
-    , http-client-tls >= 0.3.5 && < 0.4
-    , template-haskell >= 2.12.0 && < 2.13
-    , text >= 1.2.2 && < 1.3
-    , vector >= 0.12.0 && < 0.13
+      aeson >=1.2.3 && <1.3
+    , base >=4.10.1 && <4.11
+    , bimap >=0.3.3 && <0.4
+    , binary >=0.8.5 && <0.9
+    , binary-bits >=0.5 && <0.6
+    , bytestring >=0.10.8 && <0.11
+    , containers >=0.5.10 && <0.6
+    , data-binary-ieee754 >=0.4.4 && <0.5
+    , http-client >=0.5.7 && <0.6
+    , http-client-tls >=0.3.5 && <0.4
+    , template-haskell >=2.12.0 && <2.13
+    , text >=1.2.2 && <1.3
+    , vector >=0.12.0 && <0.13
   exposed-modules:
       Rattletrap
       Rattletrap.ActorMap
@@ -194,20 +197,22 @@
       executables
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      aeson >= 1.2.3 && < 1.3
-    , base >= 4.10.1 && < 4.11
-    , bimap >= 0.3.3 && < 0.4
-    , binary >= 0.8.5 && < 0.9
-    , binary-bits >= 0.5 && < 0.6
-    , bytestring >= 0.10.8 && < 0.11
-    , containers >= 0.5.10 && < 0.6
-    , data-binary-ieee754 >= 0.4.4 && < 0.5
-    , http-client >= 0.5.7 && < 0.6
-    , http-client-tls >= 0.3.5 && < 0.4
-    , template-haskell >= 2.12.0 && < 2.13
-    , text >= 1.2.2 && < 1.3
-    , vector >= 0.12.0 && < 0.13
+      aeson >=1.2.3 && <1.3
+    , base >=4.10.1 && <4.11
+    , bimap >=0.3.3 && <0.4
+    , binary >=0.8.5 && <0.9
+    , binary-bits >=0.5 && <0.6
+    , bytestring >=0.10.8 && <0.11
+    , containers >=0.5.10 && <0.6
+    , data-binary-ieee754 >=0.4.4 && <0.5
+    , http-client >=0.5.7 && <0.6
+    , http-client-tls >=0.3.5 && <0.4
     , rattletrap
+    , template-haskell >=2.12.0 && <2.13
+    , text >=1.2.2 && <1.3
+    , vector >=0.12.0 && <0.13
+  other-modules:
+      Paths_rattletrap
   default-language: Haskell2010
 
 test-suite test
@@ -217,21 +222,23 @@
       tests
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      aeson >= 1.2.3 && < 1.3
-    , base >= 4.10.1 && < 4.11
-    , bimap >= 0.3.3 && < 0.4
-    , binary >= 0.8.5 && < 0.9
-    , binary-bits >= 0.5 && < 0.6
-    , bytestring >= 0.10.8 && < 0.11
-    , containers >= 0.5.10 && < 0.6
-    , data-binary-ieee754 >= 0.4.4 && < 0.5
-    , http-client >= 0.5.7 && < 0.6
-    , http-client-tls >= 0.3.5 && < 0.4
-    , template-haskell >= 2.12.0 && < 2.13
-    , text >= 1.2.2 && < 1.3
-    , vector >= 0.12.0 && < 0.13
-    , filepath >= 1.4.1 && < 1.5
-    , hspec >= 2.4.4 && < 2.5
+      aeson >=1.2.3 && <1.3
+    , base >=4.10.1 && <4.11
+    , bimap >=0.3.3 && <0.4
+    , binary >=0.8.5 && <0.9
+    , binary-bits >=0.5 && <0.6
+    , bytestring >=0.10.8 && <0.11
+    , containers >=0.5.10 && <0.6
+    , data-binary-ieee754 >=0.4.4 && <0.5
+    , filepath >=1.4.1 && <1.5
+    , hspec >=2.4.4 && <2.5
+    , http-client >=0.5.7 && <0.6
+    , http-client-tls >=0.3.5 && <0.4
     , rattletrap
-    , temporary >= 1.2.1 && < 1.3
+    , template-haskell >=2.12.0 && <2.13
+    , temporary >=1.2.1 && <1.3
+    , text >=1.2.2 && <1.3
+    , vector >=0.12.0 && <0.13
+  other-modules:
+      Paths_rattletrap
   default-language: Haskell2010
diff --git a/replays/DE56B1B146687EA2E62E31A37A08C8EB.replay b/replays/DE56B1B146687EA2E62E31A37A08C8EB.replay
new file mode 100644
Binary files /dev/null and b/replays/DE56B1B146687EA2E62E31A37A08C8EB.replay differ
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -96,6 +96,7 @@
   , ("D428F81646A98C25902CE988AE5C14C8", "a private hockey match")
   , ("D7FB197A451D69075A0C99A2F49A4053", "an explosion attribute")
   , ("DCB3A6B94A9DBE46FDE5EAA9B012F6C8", "a pawn type attribute")
+  , ("DE56B1B146687EA2E62E31A37A08C8EB", "a problematic product attribute")
   , ("EAE311E84BA35B590A6FDBA6DD4F2FEB", "an actor/object ID collision")
   , ("EAE8DADA4BB2DC5422792C9B4A67392D", "custom team colors")
   , ("F299F176491554B11E34AB91CA76B2CE", "a location attribute")
