Jelajahi Sumber

LibImageDecoderClient: Gracefully recover from decoder crashes :^)

If the ImageDecoder service crashes while decoding an image for us,
we now recover gracefully and simply return null.

This shields the browser from bugs in our image decoders.
Andreas Kling 4 tahun lalu
induk
melakukan
8fb9d1fd1d
1 mengubah file dengan 6 tambahan dan 1 penghapusan
  1. 6 1
      Userland/Libraries/LibImageDecoderClient/Client.cpp

+ 6 - 1
Userland/Libraries/LibImageDecoderClient/Client.cpp

@@ -56,7 +56,12 @@ Optional<DecodedImage> Client::decode_image(const ByteBuffer& encoded_data)
     }
     }
 
 
     memcpy(encoded_buffer.data<void>(), encoded_data.data(), encoded_data.size());
     memcpy(encoded_buffer.data<void>(), encoded_data.data(), encoded_data.size());
-    auto response = send_sync<Messages::ImageDecoderServer::DecodeImage>(move(encoded_buffer));
+    auto response = send_sync_but_allow_failure<Messages::ImageDecoderServer::DecodeImage>(move(encoded_buffer));
+
+    if (!response) {
+        dbgln("ImageDecoder died heroically");
+        return {};
+    }
 
 
     DecodedImage image;
     DecodedImage image;
     image.is_animated = response->is_animated();
     image.is_animated = response->is_animated();