fix(webkit): address copilot PR review feedback - fix token collision, memory leak, build tags, and validation
- commit
- 8ec5d1db362bbb977b4caaa937f494cb3292c629
- author
- Brice · · 2025-10-05 14:16 UTC
- parent
- 1617d38
- signature
- unsigned
3 files · +12 -2
M pkg/webkit/thread_helpers.c +1 -0
| @@ -1,3 +1,4 @@ | |||
| 1 | + | //go:build webkit_cgo | |
| 1 | 2 | // +build webkit_cgo | |
| 2 | 3 | ||
| 3 | 4 | #include <glib.h> | |
| @@ -1,3 +1,4 @@ | |||||
| 1 | + | //go:build webkit_cgo | |||
| 1 | // +build webkit_cgo | 2 | // +build webkit_cgo | ||
| 2 | 3 | ||||
| 3 | #include <glib.h> | 4 | #include <glib.h> | ||
M pkg/webkit/workspace_widgets_cgo.go +7 -0
| @@ -183,6 +183,10 @@ static void widget_remove_focus_controller(GtkWidget* widget, GtkEventController | |||
| 183 | 183 | } | |
| 184 | 184 | ||
| 185 | 185 | tracker->is_attached = FALSE; | |
| 186 | + | ||
| 187 | + | // Remove from registry and unref controller to avoid leaks | |
| 188 | + | g_hash_table_remove(controller_registry, controller); | |
| 189 | + | g_object_unref(controller); | |
| 186 | 190 | } | |
| 187 | 191 | ||
| 188 | 192 | static GtkWidget* paned_get_start_child(GtkWidget* paned) { | |
| @@ -591,6 +595,9 @@ func PanedGetPosition(paned uintptr) int { | |||
| 591 | 595 | if paned == 0 { | |
| 592 | 596 | return 0 | |
| 593 | 597 | } | |
| 598 | + | if !widgetIsValid(paned) { | |
| 599 | + | return 0 | |
| 600 | + | } | |
| 594 | 601 | return int(C.gtk_paned_get_position((*C.GtkPaned)(unsafe.Pointer(paned)))) | |
| 595 | 602 | } | |
| 596 | 603 | ||
| @@ -183,6 +183,10 @@ static void widget_remove_focus_controller(GtkWidget* widget, GtkEventController | |||||
| 183 | } | 183 | } | ||
| 184 | 184 | ||||
| 185 | tracker->is_attached = FALSE; | 185 | tracker->is_attached = FALSE; | ||
| 186 | + | ||||
| 187 | + | // Remove from registry and unref controller to avoid leaks | |||
| 188 | + | g_hash_table_remove(controller_registry, controller); | |||
| 189 | + | g_object_unref(controller); | |||
| 186 | } | 190 | } | ||
| 187 | 191 | ||||
| 188 | static GtkWidget* paned_get_start_child(GtkWidget* paned) { | 192 | static GtkWidget* paned_get_start_child(GtkWidget* paned) { | ||
| @@ -591,6 +595,9 @@ func PanedGetPosition(paned uintptr) int { | |||||
| 591 | if paned == 0 { | 595 | if paned == 0 { | ||
| 592 | return 0 | 596 | return 0 | ||
| 593 | } | 597 | } | ||
| 598 | + | if !widgetIsValid(paned) { | |||
| 599 | + | return 0 | |||
| 600 | + | } | |||
| 594 | return int(C.gtk_paned_get_position((*C.GtkPaned)(unsafe.Pointer(paned)))) | 601 | return int(C.gtk_paned_get_position((*C.GtkPaned)(unsafe.Pointer(paned)))) | ||
| 595 | } | 602 | } | ||
| 596 | 603 | ||||
M pkg/webkit/workspace_widgets_stub.go +4 -2
| @@ -461,8 +461,10 @@ func WidgetQueueDraw(widget uintptr) { | |||
| 461 | 461 | ||
| 462 | 462 | // Focus controller functions for GTK4 EventControllerFocus (stub implementations) | |
| 463 | 463 | func WidgetAddFocusController(widget uintptr, onEnter, onLeave func()) uintptr { | |
| 464 | - | // Stub implementation - return a fake token | |
| 465 | - | return nextHoverToken | |
| 464 | + | // Stub implementation - return a unique token | |
| 465 | + | token := nextHoverToken | |
| 466 | + | nextHoverToken++ | |
| 467 | + | return token | |
| 466 | 468 | } | |
| 467 | 469 | ||
| 468 | 470 | func WidgetRemoveFocusController(widget uintptr, token uintptr) { | |
| @@ -461,8 +461,10 @@ func WidgetQueueDraw(widget uintptr) { | |||||
| 461 | 461 | ||||
| 462 | // Focus controller functions for GTK4 EventControllerFocus (stub implementations) | 462 | // Focus controller functions for GTK4 EventControllerFocus (stub implementations) | ||
| 463 | func WidgetAddFocusController(widget uintptr, onEnter, onLeave func()) uintptr { | 463 | func WidgetAddFocusController(widget uintptr, onEnter, onLeave func()) uintptr { | ||
| 464 | - | // Stub implementation - return a fake token | 464 | + | // Stub implementation - return a unique token |
| 465 | - | return nextHoverToken | 465 | + | token := nextHoverToken |
| 466 | + | nextHoverToken++ | |||
| 467 | + | return token | |||
| 466 | } | 468 | } | ||
| 467 | 469 | ||||
| 468 | func WidgetRemoveFocusController(widget uintptr, token uintptr) { | 470 | func WidgetRemoveFocusController(widget uintptr, token uintptr) { | ||