From 24cbff9a9fab03e0d4bc1b16108b04c33a27d330 Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Fri, 10 Feb 2017 20:04:47 +0100 Subject: [PATCH] Fix a few null pointer dereferences --- src/irda.c | 6 ++++-- src/serial_posix.c | 6 ++++-- src/serial_win32.c | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/irda.c b/src/irda.c index 00b749c..02217e3 100644 --- a/src/irda.c +++ b/src/irda.c @@ -405,7 +405,7 @@ dc_irda_read (dc_irda_t *device, void *data, size_t size, size_t *actual) if (device == NULL) { status = DC_STATUS_INVALIDARGS; - goto out; + goto out_invalidargs; } struct timeval tv; @@ -449,6 +449,7 @@ dc_irda_read (dc_irda_t *device, void *data, size_t size, size_t *actual) out: HEXDUMP (device->context, DC_LOGLEVEL_INFO, "Read", (unsigned char *) data, nbytes); +out_invalidargs: if (actual) *actual = nbytes; @@ -463,7 +464,7 @@ dc_irda_write (dc_irda_t *device, const void *data, size_t size, size_t *actual) if (device == NULL) { status = DC_STATUS_INVALIDARGS; - goto out; + goto out_invalidargs; } while (nbytes < size) { @@ -485,6 +486,7 @@ dc_irda_write (dc_irda_t *device, const void *data, size_t size, size_t *actual) out: HEXDUMP (device->context, DC_LOGLEVEL_INFO, "Write", (unsigned char *) data, nbytes); +out_invalidargs: if (actual) *actual = nbytes; diff --git a/src/serial_posix.c b/src/serial_posix.c index b545180..1a1567c 100644 --- a/src/serial_posix.c +++ b/src/serial_posix.c @@ -570,7 +570,7 @@ dc_serial_read (dc_serial_t *device, void *data, size_t size, size_t *actual) if (device == NULL) { status = DC_STATUS_INVALIDARGS; - goto out; + goto out_invalidargs; } // The total timeout. @@ -647,6 +647,7 @@ dc_serial_read (dc_serial_t *device, void *data, size_t size, size_t *actual) out: HEXDUMP (device->context, DC_LOGLEVEL_INFO, "Read", (unsigned char *) data, nbytes); +out_invalidargs: if (actual) *actual = nbytes; @@ -661,7 +662,7 @@ dc_serial_write (dc_serial_t *device, const void *data, size_t size, size_t *act if (device == NULL) { status = DC_STATUS_INVALIDARGS; - goto out; + goto out_invalidargs; } struct timeval tve, tvb; @@ -754,6 +755,7 @@ dc_serial_write (dc_serial_t *device, const void *data, size_t size, size_t *act out: HEXDUMP (device->context, DC_LOGLEVEL_INFO, "Write", (unsigned char *) data, nbytes); +out_invalidargs: if (actual) *actual = nbytes; diff --git a/src/serial_win32.c b/src/serial_win32.c index 2d73cb9..bba78f8 100644 --- a/src/serial_win32.c +++ b/src/serial_win32.c @@ -414,7 +414,7 @@ dc_serial_read (dc_serial_t *device, void *data, size_t size, size_t *actual) if (device == NULL) { status = DC_STATUS_INVALIDARGS; - goto out; + goto out_invalidargs; } if (!ReadFile (device->hFile, data, size, &dwRead, NULL)) { @@ -431,6 +431,7 @@ dc_serial_read (dc_serial_t *device, void *data, size_t size, size_t *actual) out: HEXDUMP (device->context, DC_LOGLEVEL_INFO, "Read", (unsigned char *) data, dwRead); +out_invalidargs: if (actual) *actual = dwRead; @@ -445,7 +446,7 @@ dc_serial_write (dc_serial_t *device, const void *data, size_t size, size_t *act if (device == NULL) { status = DC_STATUS_INVALIDARGS; - goto out; + goto out_invalidargs; } LARGE_INTEGER begin, end, freq; @@ -501,6 +502,7 @@ dc_serial_write (dc_serial_t *device, const void *data, size_t size, size_t *act out: HEXDUMP (device->context, DC_LOGLEVEL_INFO, "Write", (unsigned char *) data, dwWritten); +out_invalidargs: if (actual) *actual = dwWritten;