diff --git a/xorriso/opts_p_z.c b/xorriso/opts_p_z.c index 8f31b12d..d8afded5 100644 --- a/xorriso/opts_p_z.c +++ b/xorriso/opts_p_z.c @@ -830,7 +830,7 @@ int Xorriso_option_session_log(struct XorrisO *xorriso, char *path, int flag) /* Option -setfacl_list alias -setfacl_listi */ int Xorriso_option_setfacl_listi(struct XorrisO *xorriso, char *path, int flag) { - int ret, eaten, line_size; + int ret, eaten, line_size, diff_buf_wpt; size_t buf_size= 0, buf_add= 64 * 1024, l, linecount= 0; char *line= NULL, *buf= NULL, *wpt, *new_buf, limit_text[80]; char *file_path= NULL, *uid= NULL, *gid= NULL; @@ -923,11 +923,13 @@ int Xorriso_option_setfacl_listi(struct XorrisO *xorriso, char *path, int flag) Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); ret= 0; goto ex; } + diff_buf_wpt = wpt - buf; buf_size+= buf_add; new_buf= realloc(buf, buf_size); if(new_buf == NULL) goto out_of_mem; buf= new_buf; + wpt = buf + diff_buf_wpt; } memcpy(wpt, line, l); *(wpt + l)= '\n'; @@ -968,6 +970,19 @@ out_of_mem:; goto ex; } +/* + * Help function + * prints message with the beginning into xorriso->info + * and if xorriso->info wasn't big enough, it adds warning to the end of it to et know that the string was truncated + */ +static void check_and_print_message(struct XorrisO *xorriso, const char * beginning, const char * message) +{ + int s; + if((s = snprintf(xorriso->info_text, sizeof(xorriso->info_text), "%s%s", beginning, message)) + < 0 || (unsigned)s >= sizeof(xorriso->info_text)) + strcpy(xorriso->info_text + sizeof(xorriso->info_text) - 13, "#[truncated]"); + return; +} /* Options -setfacl alias -setfacli, -setfacl_r alias -setfacl_ri */ /* @param flag bit0=recursive -setfacl_r @@ -989,9 +1004,9 @@ int Xorriso_option_setfacli(struct XorrisO *xorriso, char *acl_text, ret= Xorriso_normalize_acl_text(xorriso, acl_text, &access_acl_text, &default_acl_text, 0); if(access_acl_text != NULL && default_acl_text != NULL) { - sprintf(xorriso->info_text, "Access-ACL :\n%s", access_acl_text); + check_and_print_message(xorriso, "Access-ACL :\n", access_acl_text); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0); - sprintf(xorriso->info_text, "Default-ACL :\n%s", default_acl_text); + check_and_print_message(xorriso, "Default-ACL :\n", default_acl_text); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0); } else if(access_acl_text == NULL && default_acl_text == NULL) { sprintf(xorriso->info_text, "Will delete Access-ACL and Default-ACL");