Browse Source

don't dereference NULL upon fdopen failure

There were several unchecked use of fdopen(); replace them with xfdopen()
that checks and dies.

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jim Meyering 16 years ago committed by Junio C Hamano
parent
commit
41698375ad
  1. 2
      builtin-add.c
  2. 2
      builtin-mailsplit.c
  3. 2
      bundle.c
  4. 6
      transport-helper.c
  5. 4
      upload-pack.c

2
builtin-add.c

@ -198,7 +198,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
out = open(file, O_CREAT | O_WRONLY, 0644); out = open(file, O_CREAT | O_WRONLY, 0644);
if (out < 0) if (out < 0)
die ("Could not open '%s' for writing.", file); die ("Could not open '%s' for writing.", file);
rev.diffopt.file = fdopen(out, "w"); rev.diffopt.file = xfdopen(out, "w");
rev.diffopt.close_file = 1; rev.diffopt.close_file = 1;
if (run_diff_files(&rev, 0)) if (run_diff_files(&rev, 0))
die ("Could not write patch"); die ("Could not write patch");

2
builtin-mailsplit.c

@ -64,7 +64,7 @@ static int split_one(FILE *mbox, const char *name, int allow_bare)
fd = open(name, O_WRONLY | O_CREAT | O_EXCL, 0666); fd = open(name, O_WRONLY | O_CREAT | O_EXCL, 0666);
if (fd < 0) if (fd < 0)
die_errno("cannot open output file '%s'", name); die_errno("cannot open output file '%s'", name);
output = fdopen(fd, "w"); output = xfdopen(fd, "w");


/* Copy it out, while searching for a line that begins with /* Copy it out, while searching for a line that begins with
* "From " and having something that looks like a date format. * "From " and having something that looks like a date format.

2
bundle.c

@ -234,7 +234,7 @@ int create_bundle(struct bundle_header *header, const char *path,
rls.git_cmd = 1; rls.git_cmd = 1;
if (start_command(&rls)) if (start_command(&rls))
return -1; return -1;
rls_fout = fdopen(rls.out, "r"); rls_fout = xfdopen(rls.out, "r");
while (fgets(buffer, sizeof(buffer), rls_fout)) { while (fgets(buffer, sizeof(buffer), rls_fout)) {
unsigned char sha1[20]; unsigned char sha1[20];
if (buffer[0] == '-') { if (buffer[0] == '-') {

6
transport-helper.c

@ -39,7 +39,7 @@ static struct child_process *get_helper(struct transport *transport)


write_str_in_full(helper->in, "capabilities\n"); write_str_in_full(helper->in, "capabilities\n");


file = fdopen(helper->out, "r"); file = xfdopen(helper->out, "r");
while (1) { while (1) {
if (strbuf_getline(&buf, file, '\n') == EOF) if (strbuf_getline(&buf, file, '\n') == EOF)
exit(128); /* child died, message supplied already */ exit(128); /* child died, message supplied already */
@ -71,7 +71,7 @@ static int fetch_with_fetch(struct transport *transport,
int nr_heads, const struct ref **to_fetch) int nr_heads, const struct ref **to_fetch)
{ {
struct child_process *helper = get_helper(transport); struct child_process *helper = get_helper(transport);
FILE *file = fdopen(helper->out, "r"); FILE *file = xfdopen(helper->out, "r");
int i; int i;
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;


@ -124,7 +124,7 @@ static struct ref *get_refs_list(struct transport *transport, int for_push)


write_str_in_full(helper->in, "list\n"); write_str_in_full(helper->in, "list\n");


file = fdopen(helper->out, "r"); file = xfdopen(helper->out, "r");
while (1) { while (1) {
char *eov, *eon; char *eov, *eon;
if (strbuf_getline(&buf, file, '\n') == EOF) if (strbuf_getline(&buf, file, '\n') == EOF)

4
upload-pack.c

@ -108,7 +108,7 @@ static int do_rev_list(int fd, void *create_full_pack)
int i; int i;
struct rev_info revs; struct rev_info revs;


pack_pipe = fdopen(fd, "w"); pack_pipe = xfdopen(fd, "w");
init_revisions(&revs, NULL); init_revisions(&revs, NULL);
revs.tag_objects = 1; revs.tag_objects = 1;
revs.tree_objects = 1; revs.tree_objects = 1;
@ -255,7 +255,7 @@ static void create_pack_file(void)


/* pass on revisions we (don't) want */ /* pass on revisions we (don't) want */
if (!shallow_nr) { if (!shallow_nr) {
FILE *pipe_fd = fdopen(pack_objects.in, "w"); FILE *pipe_fd = xfdopen(pack_objects.in, "w");
if (!create_full_pack) { if (!create_full_pack) {
int i; int i;
for (i = 0; i < want_obj.nr; i++) for (i = 0; i < want_obj.nr; i++)

Loading…
Cancel
Save