зеркало из https://github.com/microsoft/git.git
Fix export_marks() error handling.
- Don't leak one FILE * on error per export_marks() call. Found with cppcheck and reported by Martin Ettl. - Abort the potentially long for(;idnums.size;) loop on write errors. - Record error if fprintf() fails for reasons not required to set the stream error indicator, such as ENOMEM. - Add a trailing full-stop to error message when fopen() fails. Signed-off-by: Matthias Andree <matthias.andree@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
7e9ff00bbe
Коммит
96d69b5543
|
@ -428,21 +428,27 @@ static void export_marks(char *file)
|
|||
uint32_t mark;
|
||||
struct object_decoration *deco = idnums.hash;
|
||||
FILE *f;
|
||||
int e = 0;
|
||||
|
||||
f = fopen(file, "w");
|
||||
if (!f)
|
||||
error("Unable to open marks file %s for writing", file);
|
||||
error("Unable to open marks file %s for writing.", file);
|
||||
|
||||
for (i = 0; i < idnums.size; i++) {
|
||||
if (deco->base && deco->base->type == 1) {
|
||||
mark = ptr_to_mark(deco->decoration);
|
||||
fprintf(f, ":%"PRIu32" %s\n", mark,
|
||||
sha1_to_hex(deco->base->sha1));
|
||||
if (fprintf(f, ":%"PRIu32" %s\n", mark,
|
||||
sha1_to_hex(deco->base->sha1)) < 0) {
|
||||
e = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
deco++;
|
||||
}
|
||||
|
||||
if (ferror(f) || fclose(f))
|
||||
e |= ferror(f);
|
||||
e |= fclose(f);
|
||||
if (e)
|
||||
error("Unable to write marks file %s.", file);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче