fix possible crash in webview functions (Cocoa)

Sat, 08 Aug 2026 17:35:52 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 08 Aug 2026 17:35:52 +0200
changeset 1227
dd9f17feae3e
parent 1226
f38d354623be
child 1228
204677c47576

fix possible crash in webview functions (Cocoa)

ui/cocoa/webview.m file | annotate | diff | comparison | revisions
--- a/ui/cocoa/webview.m	Thu Aug 06 17:48:19 2026 +0200
+++ b/ui/cocoa/webview.m	Sat Aug 08 17:35:52 2026 +0200
@@ -29,6 +29,14 @@
 #import "webview.h"
 #import "Container.h"
 
+static UiWebViewData* create_webview_data(void) {
+    UiWebViewData *data = malloc(sizeof(UiWebViewData));
+    memset(data, 0, sizeof(UiWebViewData));
+    data->javascript = TRUE;
+    data->zoom = 1;
+    return data;
+}
+
 UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) {
     UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC);
     
@@ -47,11 +55,8 @@
         if(value->value) {
             ui_webview_set(value, value->value, UI_WEBVIEW_OBJECT_TYPE);
         } else {
-            UiWebViewData *data = malloc(sizeof(UiWebViewData));
-            memset(data, 0, sizeof(UiWebViewData));
+            UiWebViewData *data = create_webview_data();
             data->webview = (__bridge void*)webview;
-            data->javascript = TRUE;
-            data->zoom = 1;
             value->value = data;
         }
     }
@@ -60,10 +65,7 @@
 }
 
 UiWebViewData* ui_webview_data_clone(UiWebViewData *data) {
-    UiWebViewData *newdata = malloc(sizeof(UiWebViewData));
-    memset(newdata, 0, sizeof(UiWebViewData));
-    newdata->zoom = 1;
-    newdata->javascript = TRUE;
+    UiWebViewData *newdata = create_webview_data();
     
     if(data) {
         newdata->uri = data->uri ? strdup(data->uri) : NULL;
@@ -98,6 +100,12 @@
     UiWebViewData *data = g->value;
     WKWebView *webview = (__bridge WKWebView*)g->obj;
     
+    if(data == NULL) {
+        data = create_webview_data();
+        data->webview = g->obj;
+        g->value = data;
+    }
+    
     if(data->type == WEBVIEW_CONTENT_URL) {
         (void)ui_webview_get_uri(g); // this updates data->uri
     }
@@ -157,6 +165,13 @@
 void ui_webview_load_url(UiGeneric *g, const char *url) {
     WKWebView *webview = (__bridge WKWebView*)g->obj;
     UiWebViewData *data = g->value;
+    
+    if(data == NULL) {
+        data = create_webview_data();
+        data->webview = g->obj;
+        g->value = data;
+    }
+    
     data->type = WEBVIEW_CONTENT_URL;
     
     if(!url) {
@@ -183,6 +198,12 @@
     UiWebViewData *data = g->value;
     WKWebView *webview = (__bridge WKWebView*)g->obj;
     
+    if(data == NULL) {
+        data = create_webview_data();
+        data->webview = g->obj;
+        g->value = data;
+    }
+    
     data->type = WEBVIEW_CONTENT_CONTENT;
     
     free(data->uri);

mercurial