summaryrefslogtreecommitdiff
path: root/sys/src/cmd/rio
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-10-18 18:51:32 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-10-18 18:51:32 +0200
commit0a3eb7d6b1ef7e9ef569dcc8e73c98a8446b52fc (patch)
tree7ca0fb0f9b05813d698d8149a4f9d96c258be035 /sys/src/cmd/rio
parent3730a4df533c7508ccfa0382ad2661b0715f6487 (diff)
rio: copy window labels for menu3
as the menu is displayed, the window might go away or change its label causing menuhit() to dereference bad memory. just strdup() the labels before passing to menu3str to prevent accidents.
Diffstat (limited to 'sys/src/cmd/rio')
-rw-r--r--sys/src/cmd/rio/rio.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/src/cmd/rio/rio.c b/sys/src/cmd/rio/rio.c
index 9c8ea3f9c..87137e483 100644
--- a/sys/src/cmd/rio/rio.c
+++ b/sys/src/cmd/rio/rio.c
@@ -709,10 +709,14 @@ button3menu(void)
}
if(n >= nelem(menu3str)-Hidden)
n = nelem(menu3str)-Hidden-1;
- for(i=0; i<n; i++)
- menu3str[i+Hidden] = hidden[i]->label;
- menu3str[i+Hidden] = nil;
-
+ for(i=0; i<n; i++){
+ free(menu3str[i+Hidden]);
+ menu3str[i+Hidden] = estrdup(hidden[i]->label);
+ }
+ for(i+=Hidden; menu3str[i]; i++){
+ free(menu3str[i]);
+ menu3str[i] = nil;
+ }
sweeping = 1;
switch(i = menuhit(3, mousectl, &menu3, wscreen)){
case -1: