Skip to content

Commit 431d21b

Browse files
committed
stack-lang.c: fix heap-use-after-free
1 parent 1604f64 commit 431d21b

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

stack-lang.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ get_value(char *line, const char *key)
4949
return value ? value : NULL;
5050
}
5151

52-
static char *
53-
environment_get(const char *key)
52+
static void
53+
environment_get(char *buffer, size_t size, const char *key)
5454
{
5555
char filename[4096];
5656
snprintf(filename, sizeof(filename), "%s/%s", getenv("HOME"), ".config/labwc/environment");
@@ -60,7 +60,7 @@ environment_get(const char *key)
6060
size_t len = 0;
6161
FILE *stream = fopen(filename, "r");
6262
if (!stream) {
63-
goto out;
63+
return;
6464
}
6565

6666
while (getline(&line, &len, stream) != -1) {
@@ -70,13 +70,12 @@ environment_get(const char *key)
7070
}
7171
value = get_value(line, key);
7272
if (value) {
73-
goto out;
73+
snprintf(buffer, size, "%s", value);
74+
break;
7475
}
7576
}
76-
out:
7777
free(line);
7878
fclose(stream);
79-
return value ? value : "";
8079
}
8180

8281
void
@@ -103,14 +102,15 @@ stack_lang_init(struct state *state, GtkWidget *stack)
103102
gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);
104103
state->widgets.keyboard_layout = gtk_combo_box_text_new();
105104

106-
char *active_id = environment_get("XKB_DEFAULT_LAYOUT");
105+
char xkb_default_layout[1024];
106+
environment_get(xkb_default_layout, sizeof(xkb_default_layout), "XKB_DEFAULT_LAYOUT");
107107
int active = -1;
108108

109109
GList *iter;
110110
int i = 0;
111111
for (iter = keyboard_layouts; iter; iter = iter->next) {
112112
struct layout *layout = (struct layout *)iter->data;
113-
if (!strcmp(layout->lang, active_id)) {
113+
if (!strcmp(layout->lang, xkb_default_layout)) {
114114
active = i;
115115
}
116116
char buf[256];

0 commit comments

Comments
 (0)