From 62c112c7130f4f35b24d616a69079546e9ab057c Mon Sep 17 00:00:00 2001 From: Pritesh Nandgaonkar Date: Tue, 4 Jun 2019 03:35:14 -0700 Subject: [PATCH] Fix the FlipperArray creation of events Summary: The FlipperArray creation from JSONArray used to create an array of `null`'s instead of the FlipperObject, which used to crash the Flipper. Thus added a check in the flipper to not crash in the case when it receives array of nulls. Also fixed the Fresco plugin in mobile to send the proper FlipperArray. Bug: {F160049909} Reviewed By: passy Differential Revision: D15608297 fbshipit-source-id: 625e017d3bce4135ac699ee5aee8d871db378749 --- .../plugins/fresco/FrescoFlipperPlugin.java | 14 +++++++++++--- src/plugins/fresco/index.js | 9 ++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/com/facebook/flipper/plugins/fresco/FrescoFlipperPlugin.java b/android/src/main/java/com/facebook/flipper/plugins/fresco/FrescoFlipperPlugin.java index 6e7d593b2..ba21d89eb 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/fresco/FrescoFlipperPlugin.java +++ b/android/src/main/java/com/facebook/flipper/plugins/fresco/FrescoFlipperPlugin.java @@ -175,12 +175,20 @@ public class FrescoFlipperPlugin extends BufferingFlipperPlugin getImageData( imageID, encodedBitmap, bitmap, mFlipperImageTracker.getUriString(cacheKey))); } - responder.success( + + FlipperArray.Builder arrayBuilder = new FlipperArray.Builder(); + for (FlipperObject obj : mEvents) { + arrayBuilder.put(obj); + } + mEvents.clear(); + + FlipperObject object = new FlipperObject.Builder() .put("levels", levels) .put("imageDataList", imageDataListBuilder.build()) - .put("events", new FlipperArray(new JSONArray(mEvents))) - .build()); + .put("events", arrayBuilder.build()) + .build(); + responder.success(object); } }); connection.receive( diff --git a/src/plugins/fresco/index.js b/src/plugins/fresco/index.js index 3865ccf25..b4d8d2b6b 100644 --- a/src/plugins/fresco/index.js +++ b/src/plugins/fresco/index.js @@ -105,8 +105,15 @@ export default class extends FlipperPlugin { }; events.forEach((event: ImageEventWithId, index) => { + if (!event) { + return; + } const {attribution} = event; - if (attribution instanceof Array && attribution.length > 0) { + if ( + attribution && + attribution instanceof Array && + attribution.length > 0 + ) { const surface = attribution[0].trim(); if (surface.length > 0) { pluginData.surfaceList.add(surface);