r98: fixed segfault for certain scoring

due to unsigned comparisons between -1 and chromosome length
This commit is contained in:
Heng Li 2017-06-28 22:18:51 -04:00
parent 5e202afb5f
commit 38070e8a05
2 changed files with 4 additions and 4 deletions

View File

@ -181,7 +181,7 @@ static void mm_align1(void *km, const mm_mapopt_t *opt, const mm_idx_t *mi, int
if (qs > 0 && rs > 0) { // actually this is always true
l = qs < opt->max_gap? qs : opt->max_gap;
qs0 = qs - l;
l += (l * opt->a - opt->q) / opt->e;
l += l * opt->a > opt->q? (l * opt->a - opt->q) / opt->e : 0;
l = l < opt->max_gap? l : opt->max_gap;
l = l < rs? l : rs;
rs0 = rs - l;
@ -192,7 +192,7 @@ static void mm_align1(void *km, const mm_mapopt_t *opt, const mm_idx_t *mi, int
if (qe < qlen && re < mi->seq[rid].len) {
l = qlen - qe < opt->max_gap? qlen - qe : opt->max_gap;
qe0 = qe + l;
l += (l * opt->a - opt->q) / opt->e;
l += l * opt->a > opt->q? (l * opt->a - opt->q) / opt->e : 0;
l = l < opt->max_gap? l : opt->max_gap;
l = l < mi->seq[rid].len - re? l : mi->seq[rid].len - re;
re0 = re + l;
@ -315,7 +315,7 @@ mm_reg1_t *mm_align_skeleton(void *km, const mm_mapopt_t *opt, const mm_idx_t *m
int flt = 0;
if (reg->p->blen - reg->p->n_ambi - reg->p->n_diff < opt->min_chain_score) flt = 1;
else if (reg->cnt < opt->min_cnt) flt = 1;
else if (reg->p->score < opt->min_dp_score) flt = 1;
else if (reg->p->score < opt->min_dp_score && (reg->qe - reg->qs) * 2 < qlen) flt = 1;
if (flt) free(reg->p);
else if (i < r) regs[i++] = regs[r]; // NB: this also move the regs[r].p pointer
else ++i;

2
main.c
View File

@ -10,7 +10,7 @@
#include "minimap.h"
#include "mmpriv.h"
#define MM_VERSION "2.0-r96-pre"
#define MM_VERSION "2.0-r98-pre"
void liftrlimit()
{