diff --git a/src/lib/backpack/jpeg-thumbnail.js b/src/lib/backpack/jpeg-thumbnail.js
index e16c33544fd36094bb11446ae978b782c487feca..bf6a4797c32cde57d71f0c0d6e95d82bec4c1e9a 100644
--- a/src/lib/backpack/jpeg-thumbnail.js
+++ b/src/lib/backpack/jpeg-thumbnail.js
@@ -6,17 +6,24 @@ const jpegThumbnail = dataUrl => new Promise((resolve, reject) => {
 
         const maxDimension = 96; // 3x the maximum displayed size of 32px
 
-        if (image.height > image.width) {
-            canvas.height = maxDimension;
-            canvas.width = (maxDimension / image.height) * image.width;
+        if (image.height < 1 || image.width < 1) {
+            canvas.width = canvas.height = maxDimension;
+            // drawImage can fail if image height/width is less than 1
+            // Use blank image; the costume is too small to render anyway
+            ctx.fillStyle = 'white'; // Create white background, since jpeg doesn't have transparency
+            ctx.fillRect(0, 0, maxDimension, maxDimension);
         } else {
-            canvas.width = maxDimension;
-            canvas.height = (maxDimension / image.width) * image.height;
+            if (image.height > image.width) {
+                canvas.height = maxDimension;
+                canvas.width = (maxDimension / image.height) * image.width;
+            } else {
+                canvas.width = maxDimension;
+                canvas.height = (maxDimension / image.width) * image.height;
+            }
+            ctx.fillStyle = 'white';
+            ctx.fillRect(0, 0, canvas.width, canvas.height);
+            ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
         }
-
-        ctx.fillStyle = 'white'; // Create white background, since jpeg doesn't have transparency
-        ctx.fillRect(0, 0, canvas.width, canvas.height);
-        ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
         resolve(canvas.toDataURL('image/jpeg', 0.92 /* quality */)); // Default quality is 0.92
     };
     image.onerror = err => {