Skip to content

Commit f0d21c4

Browse files
committed
Fix bad-free in swaynag
1 parent 881f729 commit f0d21c4

File tree

3 files changed

+12
-9
lines changed

3 files changed

+12
-9
lines changed

include/swaynag/swaynag.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ struct swaynag_details {
5858
int offset;
5959
int visible_lines;
6060
int total_lines;
61-
struct swaynag_button button_details;
61+
struct swaynag_button *button_details;
6262
struct swaynag_button button_up;
6363
struct swaynag_button button_down;
6464
};

swaynag/config.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,8 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag,
180180
break;
181181
case 'L': // Detailed Button Text
182182
if (swaynag) {
183-
free(swaynag->details.button_details.text);
184-
swaynag->details.button_details.text = strdup(optarg);
183+
free(swaynag->details.button_details->text);
184+
swaynag->details.button_details->text = strdup(optarg);
185185
}
186186
break;
187187
case 'm': // Message

swaynag/main.c

+9-6
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@ int main(int argc, char **argv) {
3434
button_close->type = SWAYNAG_ACTION_DISMISS;
3535
list_add(swaynag.buttons, button_close);
3636

37-
swaynag.details.button_details.text = strdup("Toggle Details");
38-
swaynag.details.button_details.type = SWAYNAG_ACTION_EXPAND;
39-
37+
swaynag.details.button_details =
38+
calloc(sizeof(struct swaynag_button), 1);
39+
swaynag.details.button_details->text = strdup("Toggle Details");
40+
swaynag.details.button_details->type = SWAYNAG_ACTION_EXPAND;
4041

4142
char *config_path = NULL;
4243
bool debug = false;
@@ -99,9 +100,10 @@ int main(int argc, char **argv) {
99100
swaynag_types_free(types);
100101

101102
if (swaynag.details.message) {
102-
list_add(swaynag.buttons, &swaynag.details.button_details);
103+
list_add(swaynag.buttons, swaynag.details.button_details);
103104
} else {
104-
free(swaynag.details.button_details.text);
105+
free(swaynag.details.button_details->text);
106+
free(swaynag.details.button_details);
105107
}
106108

107109
wlr_log(WLR_DEBUG, "Output: %s", swaynag.type->output);
@@ -123,7 +125,8 @@ int main(int argc, char **argv) {
123125

124126
cleanup:
125127
swaynag_types_free(types);
126-
free(swaynag.details.button_details.text);
128+
free(swaynag.details.button_details->text);
129+
free(swaynag.details.button_details);
127130
swaynag_destroy(&swaynag);
128131
return exit_code;
129132
}

0 commit comments

Comments
 (0)