From 93e818c7e1b3f2c7ca01d5b78ca1ac6869c00f92 Mon Sep 17 00:00:00 2001 From: "teemu.kataja" Date: Tue, 2 Nov 2021 11:29:42 +0200 Subject: [PATCH 1/3] fix coordinate to reader translation bug --- api/sda/sda.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/api/sda/sda.go b/api/sda/sda.go index af52b6c..8a00fa5 100644 --- a/api/sda/sda.go +++ b/api/sda/sda.go @@ -186,15 +186,22 @@ func Download(w http.ResponseWriter, r *http.Request) { http.Error(w, "endCoordinate must be an integer", 400) return } + if end < start { + log.Errorf("endCoordinate=%d must be greater than startCoordinate=%d", end, start) + http.Error(w, "endCoordinate must be greater than startCoordinate", 400) + return + } + // API query params take a coordinate range to read "start...end" + // But Crypt4GHReader takes a start byte and number of bytes to read "start...(end-start)" + bytesToRead := end - start coordinates.NumberLengths = 2 - coordinates.Lengths = []uint64{start, end} + coordinates.Lengths = []uint64{start, bytesToRead} } else { coordinates = nil } // Get file stream fileStream, err := files.StreamFile(fileDetails.Header, file, coordinates) - log.Debugf("HELLO %v", err) if err != nil { log.Errorf("could not prepare file for streaming, %s", err) http.Error(w, "file stream error", 500) From 76e03ae0a9148414a79dce1ee1c1cf9cdfce315e Mon Sep 17 00:00:00 2001 From: "teemu.kataja" Date: Tue, 2 Nov 2021 11:38:29 +0200 Subject: [PATCH 2/3] remove unreachable error check --- internal/database/database.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/database/database.go b/internal/database/database.go index 9e51887..987b9ae 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -151,7 +151,7 @@ func (dbs *SQLdb) getFiles(datasetID string) ([]*FileInfo, error) { "local_ega_ebi.file a, local_ega_ebi.file_dataset b WHERE dataset_id = $1 AND a.file_id=b.file_id;" rows, err := db.Query(query, datasetID) - if rows.Err() != nil || err != nil { + if err != nil { log.Error(err) return nil, err } From 0aa5af3ce690a610c5c2b369dd9d0ef8d58468d7 Mon Sep 17 00:00:00 2001 From: "teemu.kataja" Date: Tue, 2 Nov 2021 11:40:58 +0200 Subject: [PATCH 3/3] don't lint the unreachable error check --- internal/database/database.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/database/database.go b/internal/database/database.go index 987b9ae..2f44900 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -150,6 +150,7 @@ func (dbs *SQLdb) getFiles(datasetID string) ([]*FileInfo, error) { "decrypted_file_size, decrypted_file_checksum, decrypted_file_checksum_type, file_status from " + "local_ega_ebi.file a, local_ega_ebi.file_dataset b WHERE dataset_id = $1 AND a.file_id=b.file_id;" + // nolint:rowserrcheck rows, err := db.Query(query, datasetID) if err != nil { log.Error(err)