From ef2ebe9c3745d8a90890b2ea8d114de63414bca1 Mon Sep 17 00:00:00 2001 From: Joey Lee Date: Tue, 13 Aug 2024 14:21:01 +0900 Subject: [PATCH 1/2] fix: seq len underflow --- src/prefiltering/UngappedAlignment.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/prefiltering/UngappedAlignment.cpp b/src/prefiltering/UngappedAlignment.cpp index 54cef6f50..12af33c94 100644 --- a/src/prefiltering/UngappedAlignment.cpp +++ b/src/prefiltering/UngappedAlignment.cpp @@ -249,7 +249,7 @@ void UngappedAlignment::scoreDiagonalAndUpdateHits(const char * queryProfile, // hack to avoid too long sequences // this sequences will be processed by computeLongScore later seqs[seqIdx].seq = (unsigned char *) tmp.first; - seqs[seqIdx].seqLen = 1; + seqs[seqIdx].seqLen = 0; seqs[seqIdx].id = seqIdx; }else{ seqs[seqIdx].seq = (unsigned char *) tmp.first; @@ -276,7 +276,7 @@ void UngappedAlignment::scoreDiagonalAndUpdateHits(const char * queryProfile, unsigned int minSeqLen = std::min(targetMaxLen - minDistToDiagonal, queryLen); for(size_t i = 0; i < DIAGONALBINSIZE; i++) { tmpSeqs[i] = seqs[i].seq + minDistToDiagonal; - seqLength[i] = std::min(seqs[i].seqLen - minDistToDiagonal, minSeqLen); + seqLength[i] = (seqs[i].seqLen == 0) ? 0 : std::min(seqs[i].seqLen - minDistToDiagonal, minSeqLen); } unrolledDiagonalScoring(queryProfile, seqLength, tmpSeqs, score_arr); @@ -286,7 +286,7 @@ void UngappedAlignment::scoreDiagonalAndUpdateHits(const char * queryProfile, for(size_t hitIdx = 0; hitIdx < hitSize; hitIdx++){ hits[seqs[hitIdx].id]->count = static_cast(std::min(static_cast(255), score_arr[hitIdx])); - if(seqs[hitIdx].seqLen == 1){ + if(seqs[hitIdx].seqLen == 0){ std::pair dbSeq = sequenceLookup->getSequence(hits[hitIdx]->id); if(dbSeq.second >= 32768){ int max = computeLongScore(queryProfile, queryLen, dbSeq, diagonal); From a64d60a4d39fa4d87c4d16c9ed995ab18cedab83 Mon Sep 17 00:00:00 2001 From: Joey Lee Date: Tue, 13 Aug 2024 15:11:51 +0900 Subject: [PATCH 2/2] fix: safe check --- src/prefiltering/UngappedAlignment.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prefiltering/UngappedAlignment.cpp b/src/prefiltering/UngappedAlignment.cpp index 12af33c94..1aec6b267 100644 --- a/src/prefiltering/UngappedAlignment.cpp +++ b/src/prefiltering/UngappedAlignment.cpp @@ -276,7 +276,7 @@ void UngappedAlignment::scoreDiagonalAndUpdateHits(const char * queryProfile, unsigned int minSeqLen = std::min(targetMaxLen - minDistToDiagonal, queryLen); for(size_t i = 0; i < DIAGONALBINSIZE; i++) { tmpSeqs[i] = seqs[i].seq + minDistToDiagonal; - seqLength[i] = (seqs[i].seqLen == 0) ? 0 : std::min(seqs[i].seqLen - minDistToDiagonal, minSeqLen); + seqLength[i] = (seqs[i].seqLen > minDistToDiagonal) ? std::min(seqs[i].seqLen - minDistToDiagonal, minSeqLen) : 0; } unrolledDiagonalScoring(queryProfile, seqLength, tmpSeqs, score_arr);