From 93c1e07947e83f13fa8f1c89cb4897b5c71459ff Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 11 Jan 2007 13:16:26 -0800 Subject: [PATCH] config-set: check write-in-full returns in set_multivar Signed-off-by: Junio C Hamano --- config.c | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/config.c b/config.c index 2cd0263e1..733fb1a34 100644 --- a/config.c +++ b/config.c @@ -694,11 +694,9 @@ int git_config_set_multivar(const char* key, const char* value, store.key = (char*)key; if (!store_write_section(fd, key) || - !store_write_pair(fd, key, value)) { - ret = write_error(); - goto out_free; - } - } else{ + !store_write_pair(fd, key, value)) + goto write_err_out; + } else { struct stat st; char* contents; int i, copy_begin, copy_end, new_line = 0; @@ -777,31 +775,33 @@ int git_config_set_multivar(const char* key, const char* value, /* write the first part of the config */ if (copy_end > copy_begin) { - write_in_full(fd, contents + copy_begin, - copy_end - copy_begin); - if (new_line) - write_in_full(fd, "\n", 1); + if (write_in_full(fd, contents + copy_begin, + copy_end - copy_begin) < + copy_end - copy_begin) + goto write_err_out; + if (new_line && + write_in_full(fd, "\n", 1) != 1) + goto write_err_out; } copy_begin = store.offset[i]; } /* write the pair (value == NULL means unset) */ if (value != NULL) { - if (store.state == START) - if (!store_write_section(fd, key)) { - ret = write_error(); - goto out_free; - } - if (!store_write_pair(fd, key, value)) { - ret = write_error(); - goto out_free; + if (store.state == START) { + if (!store_write_section(fd, key)) + goto write_err_out; } + if (!store_write_pair(fd, key, value)) + goto write_err_out; } /* write the rest of the config */ if (copy_begin < st.st_size) - write_in_full(fd, contents + copy_begin, - st.st_size - copy_begin); + if (write_in_full(fd, contents + copy_begin, + st.st_size - copy_begin) < + st.st_size - copy_begin) + goto write_err_out; munmap(contents, st.st_size); unlink(config_filename); @@ -824,6 +824,11 @@ out_free: free(lock_file); } return ret; + +write_err_out: + ret = write_error(); + goto out_free; + } int git_config_rename_section(const char *old_name, const char *new_name) -- 2.30.2