Quellcode durchsuchen

LibWeb: Fix null dereference in ResourceClient::set_resource()

If resource_did_load() results in the ResourceClient being destroyed,
we can't dereference the weak ResourceClient right after.
Andreas Kling vor 2 Jahren
Ursprung
Commit
b02402e116
1 geänderte Dateien mit 6 neuen und 2 gelöschten Zeilen
  1. 6 2
      Userland/Libraries/LibWeb/Loader/Resource.cpp

+ 6 - 2
Userland/Libraries/LibWeb/Loader/Resource.cpp

@@ -176,12 +176,16 @@ void ResourceClient::set_resource(Resource* resource)
                     return;
 
                 // Make sure that reused resources also have their load callback fired.
-                if (weak_this->m_resource->is_loaded())
+                if (weak_this->m_resource->is_loaded()) {
                     weak_this->resource_did_load();
+                    return;
+                }
 
                 // Make sure that reused resources also have their fail callback fired.
-                if (weak_this->m_resource->is_failed())
+                if (weak_this->m_resource->is_failed()) {
                     weak_this->resource_did_fail();
+                    return;
+                }
             });
         }
     }