From b810ee75a15f0267236873e0c66a2279dee7c737 Mon Sep 17 00:00:00 2001 From: Jeremy Compostella Date: Tue, 8 Sep 2015 19:15:09 +0200 Subject: 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: Jeremy Compostella Signed-off-by: Gaelle Nassiet --- applypatch/imgdiff.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'applypatch') diff --git a/applypatch/imgdiff.c b/applypatch/imgdiff.c index 3bac8be..e12a385 100644 --- a/applypatch/imgdiff.c +++ b/applypatch/imgdiff.c @@ -623,7 +623,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) { -- cgit v1.1