java-topology/defects/gstreamer/patch/gstreamer-0002.patch
russell@unturf.com 25c2bafdee undf: assign 694-720; stamp patches; ruby-0003/elixir-0002/r-source-0002/victoria-metrics-0002
New UNDF assignments (693→720):
  elixir-0002 → UNDF-2026-000000698 (typespec used_type_pairs O(T²))
  r-source-0002 → UNDF-2026-000000711 (.walkClassGraph match dedup O(S²))
  ruby-0003 → UNDF-2026-000000712 (RubyGems dependent_gems O(N²×D))
  victoria-metrics-0002 → UNDF-2026-000000717 (MetricName tag-filter O(T×I))

Total: 720 UNDF assigned
2026-03-29 22:28:31 -04:00

49 lines
2 KiB
Diff

# UNDF: UNDF-2026-000000685
--- a/subprojects/gstreamer/plugins/elements/gstinputselector.c
+++ b/subprojects/gstreamer/plugins/elements/gstinputselector.c
@@ -1806,7 +1806,8 @@ gst_input_selector_event (GstPad * pad, GstObject * parent, GstEvent * event)
gboolean result = FALSE;
GstIterator *iter;
gboolean done = FALSE;
GValue item = { 0, };
GstPad *eventpad;
- GList *pushed_pads = NULL;
+ /* CWE-407 fix: replace O(N) g_list_find seen-list with O(1) hash set */
+ GHashTable *pushed_pads_set = g_hash_table_new (g_direct_hash, g_direct_equal);
sel = GST_INPUT_SELECTOR (parent);
iter = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (sel));
@@ -1826,7 +1827,7 @@ gst_input_selector_event (GstPad * pad, GstObject * parent, GstEvent * event)
gst_event_ref (event);
result |= gst_pad_push_event (eventpad, event);
- pushed_pads = g_list_append (pushed_pads, eventpad);
+ g_hash_table_add (pushed_pads_set, eventpad);
gst_object_unref (eventpad);
} else {
GST_INPUT_SELECTOR_UNLOCK (sel);
@@ -1838,19 +1839,19 @@ gst_input_selector_event (GstPad * pad, GstObject * parent, GstEvent * event)
eventpad = g_value_get_object (&item);
- /* if already pushed, skip */
- if (g_list_find (pushed_pads, eventpad)) {
+ /* CWE-407 fix: O(1) hash lookup replaces O(N) g_list_find scan */
+ if (g_hash_table_contains (pushed_pads_set, eventpad)) {
g_value_reset (&item);
break;
}
gst_event_ref (event);
result |= gst_pad_push_event (eventpad, event);
- pushed_pads = g_list_append (pushed_pads, eventpad);
+ g_hash_table_add (pushed_pads_set, eventpad);
g_value_reset (&item);
break;
@@ -1870,7 +1871,7 @@ gst_input_selector_event (GstPad * pad, GstObject * parent, GstEvent * event)
g_value_unset (&item);
gst_iterator_free (iter);
- g_list_free (pushed_pads);
+ g_hash_table_destroy (pushed_pads_set);
gst_event_unref (event);
return result;