Added a cleaner way of allocating the zenity command.

This commit is contained in:
fedir 2025-04-15 19:02:36 +02:00
parent 3157940c0b
commit c4ef955ff1
Signed by: fedir
GPG Key ID: C959EE85F0C9362C

View File

@ -64,15 +64,24 @@ void destroy_ui_socket(void) {
*/ */
access_t ask_access(const char *filename, struct process_info proc_info) { access_t ask_access(const char *filename, struct process_info proc_info) {
FILE *fp = NULL; FILE *fp = NULL;
size_t command_len = char *command = NULL;
139 + sizeof(pid_t) * 8 + strlen(proc_info.name) + strlen(filename); int ret =
char *command = (char *)malloc(command_len); asprintf(&command,
snprintf(command, command_len,
"zenity --question --extra-button \"Allow this time\" --title " "zenity --question --extra-button \"Allow this time\" --title "
"\"Allow Access?\" --text \"Allow process " "\"Allow Access?\" --text \"Allow process "
"<tt>%s</tt> with PID <tt>%d</tt> to access <tt>%s</tt>\"", "<tt>%s</tt> with PID <tt>%d</tt> to access <tt>%s</tt>\"",
proc_info.name, proc_info.PID, filename); proc_info.name, proc_info.PID, filename);
if (ret < 0) {
// If asprintf fails, the contents of command are undefined (see man
// asprintf). That does not explicitly rule out that command will be a valid
// pointer. But the risk of freeing a non-allocated pointer is too much to
// justify preparing for this.
fprintf(stderr, "Could not create query on rule insertion");
perror("");
return 1;
}
// Zenity Question Message Popup // Zenity Question Message Popup
fp = popen(command, "r"); fp = popen(command, "r");
free(command); free(command);