From 5f70bdc699c8960af802b1232544230bd286db6b Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 17 Mar 2013 23:51:16 +0100 Subject: [PATCH] uart drivers: missing nfc_device_free() on some error handling branches --- libnfc/drivers/acr122s.c | 2 ++ libnfc/drivers/arygon.c | 4 ++++ libnfc/drivers/pn532_uart.c | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/libnfc/drivers/acr122s.c b/libnfc/drivers/acr122s.c index e4f8542..8cc9c6f 100644 --- a/libnfc/drivers/acr122s.c +++ b/libnfc/drivers/acr122s.c @@ -438,6 +438,7 @@ acr122s_scan(const nfc_context *context, nfc_connstring connstrings[], const siz if (!pnd->driver_data) { perror("malloc"); uart_close(sp); + nfc_device_free(pnd); return -1; } DRIVER_DATA(pnd)->port = sp; @@ -446,6 +447,7 @@ acr122s_scan(const nfc_context *context, nfc_connstring connstrings[], const siz #ifndef WIN32 if (pipe(DRIVER_DATA(pnd)->abort_fds) < 0) { uart_close(DRIVER_DATA(pnd)->port); + nfc_device_free(pnd); return 0; } #else diff --git a/libnfc/drivers/arygon.c b/libnfc/drivers/arygon.c index 35f4dfd..ea04be0 100644 --- a/libnfc/drivers/arygon.c +++ b/libnfc/drivers/arygon.c @@ -129,6 +129,7 @@ arygon_scan(const nfc_context *context, nfc_connstring connstrings[], const size if (!pnd->driver_data) { perror("malloc"); uart_close(sp); + nfc_device_free(pnd); return 0; } DRIVER_DATA(pnd)->port = sp; @@ -140,6 +141,7 @@ arygon_scan(const nfc_context *context, nfc_connstring connstrings[], const size // pipe-based abort mecanism if (pipe(DRIVER_DATA(pnd)->iAbortFds) < 0) { uart_close(DRIVER_DATA(pnd)->port); + nfc_device_free(pnd); return 0; } #else @@ -250,6 +252,7 @@ arygon_open(const nfc_context *context, const nfc_connstring connstring) if (!pnd->driver_data) { perror("malloc"); uart_close(sp); + nfc_device_free(pnd); return NULL; } DRIVER_DATA(pnd)->port = sp; @@ -268,6 +271,7 @@ arygon_open(const nfc_context *context, const nfc_connstring connstring) // pipe-based abort mecanism if (pipe(DRIVER_DATA(pnd)->iAbortFds) < 0) { uart_close(DRIVER_DATA(pnd)->port); + nfc_device_free(pnd); return NULL; } #else diff --git a/libnfc/drivers/pn532_uart.c b/libnfc/drivers/pn532_uart.c index d82555d..510918f 100644 --- a/libnfc/drivers/pn532_uart.c +++ b/libnfc/drivers/pn532_uart.c @@ -98,6 +98,7 @@ pn532_uart_scan(const nfc_context *context, nfc_connstring connstrings[], const if (!pnd->driver_data) { perror("malloc"); uart_close(sp); + nfc_device_free(pnd); return 0; } DRIVER_DATA(pnd)->port = sp; @@ -113,6 +114,7 @@ pn532_uart_scan(const nfc_context *context, nfc_connstring connstrings[], const // pipe-based abort mecanism if (pipe(DRIVER_DATA(pnd)->iAbortFds) < 0) { uart_close(DRIVER_DATA(pnd)->port); + nfc_device_free(pnd); return 0; } #else @@ -222,6 +224,7 @@ pn532_uart_open(const nfc_context *context, const nfc_connstring connstring) if (!pnd->driver_data) { perror("malloc"); uart_close(sp); + nfc_device_free(pnd); return NULL; } DRIVER_DATA(pnd)->port = sp; @@ -241,6 +244,7 @@ pn532_uart_open(const nfc_context *context, const nfc_connstring connstring) // pipe-based abort mecanism if (pipe(DRIVER_DATA(pnd)->iAbortFds) < 0) { uart_close(DRIVER_DATA(pnd)->port); + nfc_device_free(pnd); return NULL; } #else