Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a91c66d7 authored by Jeremy Compostella's avatar Jeremy Compostella
Browse files

imgdiff: fix file descriptor leak



mkstemp() allocates a file description that is never released.  If
MakePatch() is called too many time, imgdiff reaches the Operating
System EMFILE (too many open files) limit.

Change-Id: Icbe1399f6f6d32cfa1830f879cacf7d75bbd9fc3
Signed-off-by: default avatarJeremy Compostella <jeremy.compostella@intel.com>
Signed-off-by: default avatarGaelle Nassiet <gaellex.nassiet@intel.com>
parent f8c303f9
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -628,7 +628,15 @@ unsigned char* MakePatch(ImageChunk* src, ImageChunk* tgt, size_t* size) {
  }

  char ptemp[] = "/tmp/imgdiff-patch-XXXXXX";
  mkstemp(ptemp);
  int fd = mkstemp(ptemp);

  if (fd == -1) {
    printf("MakePatch failed to create a temporary file: %s\n",
           strerror(errno));
    return NULL;
  }
  close(fd); // temporary file is created and we don't need its file
             // descriptor

  int r = bsdiff(src->data, src->len, &(src->I), tgt->data, tgt->len, ptemp);
  if (r != 0) {