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

Commit 241bcf05 authored by Narayan Kamath's avatar Narayan Kamath
Browse files

Fix file descriptor leak when opening invalid archives.

Also add -Wunreachable-code to the set of compiler flags, otherwise
noreturn becomes considerably less useful.

bug: https://code.google.com/p/android/issues/detail?id=171099
Change-Id: I9a95d45633c731c7046d4e4a39844d9cebfd1718
parent 55431d97
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -23,7 +23,7 @@ LOCAL_SRC_FILES := protocol.c engine.c bootimg_utils.cpp fastboot.cpp util.c fs.
LOCAL_MODULE := fastboot
LOCAL_MODULE := fastboot
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE_TAGS := debug
LOCAL_CONLYFLAGS += -std=gnu99
LOCAL_CONLYFLAGS += -std=gnu99
LOCAL_CFLAGS += -Wall -Wextra -Werror
LOCAL_CFLAGS += -Wall -Wextra -Werror -Wunreachable-code


ifeq ($(HOST_OS),linux)
ifeq ($(HOST_OS),linux)
  LOCAL_SRC_FILES += usb_linux.c util_linux.c
  LOCAL_SRC_FILES += usb_linux.c util_linux.c
+3 −0
Original line number Original line Diff line number Diff line
@@ -701,12 +701,14 @@ void do_update(usb_handle *usb, const char *filename, int erase_first)
    ZipArchiveHandle zip;
    ZipArchiveHandle zip;
    int error = OpenArchive(filename, &zip);
    int error = OpenArchive(filename, &zip);
    if (error != 0) {
    if (error != 0) {
        CloseArchive(zip);
        die("failed to open zip file '%s': %s", filename, ErrorCodeString(error));
        die("failed to open zip file '%s': %s", filename, ErrorCodeString(error));
    }
    }


    unsigned sz;
    unsigned sz;
    void* data = unzip_file(zip, "android-info.txt", &sz);
    void* data = unzip_file(zip, "android-info.txt", &sz);
    if (data == 0) {
    if (data == 0) {
        CloseArchive(zip);
        die("update package '%s' has no android-info.txt", filename);
        die("update package '%s' has no android-info.txt", filename);
    }
    }


@@ -717,6 +719,7 @@ void do_update(usb_handle *usb, const char *filename, int erase_first)
        if (fd < 0) {
        if (fd < 0) {
            if (images[i].is_optional)
            if (images[i].is_optional)
                continue;
                continue;
            CloseArchive(zip);
            die("update package missing %s", images[i].img_name);
            die("update package missing %s", images[i].img_name);
        }
        }
        fastboot_buffer buf;
        fastboot_buffer buf;
+1 −1
Original line number Original line Diff line number Diff line
@@ -69,7 +69,7 @@ int fb_queue_is_empty(void);
/* util stuff */
/* util stuff */
double now();
double now();
char *mkmsg(const char *fmt, ...);
char *mkmsg(const char *fmt, ...);
void die(const char *fmt, ...);
__attribute__((__noreturn__)) void die(const char *fmt, ...);


void get_my_path(char *path);
void get_my_path(char *path);