From 462419cc68e1469ca5426f6c82dc17d9b1bd2a88 Mon Sep 17 00:00:00 2001 From: Ralph Little Date: Sun, 26 Jul 2020 11:02:40 -0700 Subject: [PATCH] gt68xx: Initial check-in of proposed patch for crash. Ulf and I will review and test this patch on this branch. It does seem to fix the issue, but I want to check it out a little more before we commit it to master. --- backend/gt68xx.c | 3 ++- backend/gt68xx_mid.c | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/backend/gt68xx.c b/backend/gt68xx.c index 00190fefd..568bbc749 100644 --- a/backend/gt68xx.c +++ b/backend/gt68xx.c @@ -2130,6 +2130,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, && s->byte_count >= s->reader->params.pixel_xs) { DBG (4, "sane_read: nothing more to scan: EOF\n"); + gt68xx_scanner_stop_scan(s); return SANE_STATUS_EOF; } @@ -2328,7 +2329,7 @@ sane_cancel (SANE_Handle handle) /* some scanners don't like this command when cancelling a scan */ sanei_usb_set_timeout (SHORT_TIMEOUT); gt68xx_device_fix_descriptor (s->dev); - gt68xx_scanner_stop_scan (s); + //gt68xx_scanner_stop_scan (s); sanei_usb_set_timeout (LONG_TIMEOUT); if (s->dev->model->flags & GT68XX_FLAG_SHEET_FED) diff --git a/backend/gt68xx_mid.c b/backend/gt68xx_mid.c index 0d5cbe43f..2d4c74504 100644 --- a/backend/gt68xx_mid.c +++ b/backend/gt68xx_mid.c @@ -1006,6 +1006,7 @@ gt68xx_line_reader_new (GT68xx_Device * dev, DBG (3, "gt68xx_line_reader_new: cannot allocate line buffers: %s\n", sane_strstatus (status)); free (reader); + reader = NULL; return status; } @@ -1105,6 +1106,7 @@ gt68xx_line_reader_new (GT68xx_Device * dev, reader->params.depth); gt68xx_line_reader_free_delays (reader); free (reader); + reader = NULL; return SANE_STATUS_UNSUPPORTED; } @@ -1119,6 +1121,7 @@ gt68xx_line_reader_new (GT68xx_Device * dev, DBG (3, "gt68xx_line_reader_new: cannot allocate pixel buffer\n"); gt68xx_line_reader_free_delays (reader); free (reader); + reader = NULL; return SANE_STATUS_NO_MEM; } @@ -1135,6 +1138,7 @@ gt68xx_line_reader_new (GT68xx_Device * dev, free (reader->pixel_buffer); gt68xx_line_reader_free_delays (reader); free (reader); + reader = NULL; return status; } @@ -1150,6 +1154,14 @@ gt68xx_line_reader_free (GT68xx_Line_Reader * reader) DBG (6, "gt68xx_line_reader_free: enter\n"); + if (reader == NULL) + { + DBG (3, "gt68xx_line_reader_free: already freed\n"); + DBG (6, "gt68xx_line_reader_free: leave\n"); + return SANE_STATUS_INVAL; + } + + gt68xx_line_reader_free_delays (reader); if (reader->pixel_buffer) @@ -1167,6 +1179,7 @@ gt68xx_line_reader_free (GT68xx_Line_Reader * reader) } free (reader); + reader = NULL; DBG (6, "gt68xx_line_reader_free: leave\n"); return status;