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) diff --git a/internal/database/database.go b/internal/database/database.go index 9e51887..2f44900 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -150,8 +150,9 @@ 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 rows.Err() != nil || err != nil { + if err != nil { log.Error(err) return nil, err }