A tiling window manager

clean_up: Use list_for_each_safe_entry when deleting vscreens

Fixes a use after free (#59)

authored by

joveian and committed by
GitHub
5f799eee 5b09bef8

+2 -2
+2 -2
globals.c
··· 580 580 { 581 581 rp_screen *cur; 582 582 rp_vscreen *vcur; 583 - struct list_head *iter, *tmp; 583 + struct list_head *iter, *tmp, *iter2, *tmp2; 584 584 585 585 history_save(); 586 586 ··· 591 591 free_window_stuff(); 592 592 593 593 list_for_each_safe_entry(cur, iter, tmp, &rp_screens, node) { 594 - list_for_each_entry(vcur, &cur->vscreens, node) 594 + list_for_each_safe_entry(vcur, iter2, tmp2, &cur->vscreens, node) 595 595 vscreen_del(vcur); 596 596 597 597 list_del(&cur->node);