diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index b8e8bd4..1cbba02 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,20 @@
+2022-01-26  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        Make some minor adjustments after r288621
+        https://bugs.webkit.org/show_bug.cgi?id=235598
+        rdar://88032375
+
+        Reviewed by Darin Adler.
+
+        Address some post-commit review comments.
+
+        * dom/ImageOverlay.cpp:
+        (WebCore::ImageOverlay::updateSubtree):
+        * testing/Internals.cpp:
+        (WebCore::Internals::installImageOverlay):
+        * testing/Internals.mm:
+        (WebCore::Internals::fakeDataDetectorResultForTesting):
+
 2022-01-26  Alan Bujtas  <zalan@apple.com>
 
         REGRESSION (r281306): Non-breaking space incorrectly collapsed when webkit-nbsp-mode is set to "space"
diff --git a/Source/WebCore/dom/ImageOverlay.cpp b/Source/WebCore/dom/ImageOverlay.cpp
index 69d30af..3d40eaf 100644
--- a/Source/WebCore/dom/ImageOverlay.cpp
+++ b/Source/WebCore/dom/ImageOverlay.cpp
@@ -212,13 +212,13 @@
     mediaControlsContainer = ([&]() -> RefPtr<HTMLElement> {
         RefPtr mediaElement = dynamicDowncast<HTMLMediaElement>(element);
         if (!mediaElement)
-            return { };
+            return nullptr;
 
         Ref shadowRoot = mediaElement->ensureUserAgentShadowRoot();
         RefPtr controlsHost = mediaElement->mediaControlsHost();
         if (!controlsHost) {
             ASSERT_NOT_REACHED();
-            return { };
+            return nullptr;
         }
 
         auto& containerClass = controlsHost->mediaControlsContainerClassName();
@@ -227,7 +227,7 @@
                 return &child;
         }
         ASSERT_NOT_REACHED();
-        return { };
+        return nullptr;
     })();
 #endif // ENABLE(MODERN_MEDIA_CONTROLS)
 
diff --git a/Source/WebCore/testing/Internals.cpp b/Source/WebCore/testing/Internals.cpp
index 54ecf5c..4a22bbb 100644
--- a/Source/WebCore/testing/Internals.cpp
+++ b/Source/WebCore/testing/Internals.cpp
@@ -5826,8 +5826,8 @@
             return makeDataForLine(line);
         })
 #if ENABLE(DATA_DETECTION)
-        , dataDetectors.map([] (auto& dataDetector) -> TextRecognitionDataDetector {
-            return TextRecognitionDataDetector { fakeDataDetectorResultForTesting(), { getQuad(dataDetector) } };
+        , dataDetectors.map([](auto& dataDetector) -> TextRecognitionDataDetector {
+            return { fakeDataDetectorResultForTesting(), { getQuad(dataDetector) } };
         })
 #endif // ENABLE(DATA_DETECTION)
         , blocks.map([] (auto& block) {
diff --git a/Source/WebCore/testing/Internals.mm b/Source/WebCore/testing/Internals.mm
index 0b7e385..492f16f 100644
--- a/Source/WebCore/testing/Internals.mm
+++ b/Source/WebCore/testing/Internals.mm
@@ -179,19 +179,19 @@
 
 DDScannerResult *Internals::fakeDataDetectorResultForTesting()
 {
-    static NeverDestroyed result = ([]() -> RetainPtr<DDScannerResult> {
+    static NeverDestroyed result = []() -> RetainPtr<DDScannerResult> {
         auto scanner = adoptCF(PAL::softLink_DataDetectorsCore_DDScannerCreate(DDScannerTypeStandard, 0, nullptr));
         auto stringToScan = CFSTR("webkit.org");
         auto query = adoptCF(PAL::softLink_DataDetectorsCore_DDScanQueryCreateFromString(kCFAllocatorDefault, stringToScan, CFRangeMake(0, CFStringGetLength(stringToScan))));
         if (!PAL::softLink_DataDetectorsCore_DDScannerScanQuery(scanner.get(), query.get()))
-            return { };
+            return nil;
 
         auto results = adoptCF(PAL::softLink_DataDetectorsCore_DDScannerCopyResultsWithOptions(scanner.get(), DDScannerCopyResultsOptionsNoOverlap));
         if (!CFArrayGetCount(results.get()))
-            return { };
+            return nil;
 
         return { [[PAL::getDDScannerResultClass() resultsFromCoreResults:results.get()] firstObject] };
-    })();
+    }();
     return result->get();
 }
 
