r369: bugfix - segfault caused by the last change

Sigh... Even the simplest change can lead to new bugs.
This commit is contained in:
Heng Li 2013-03-19 01:04:57 -04:00
parent 1e3cadbfc2
commit 8437cd4edd
2 changed files with 27 additions and 26 deletions

View File

@ -759,11 +759,11 @@ int mem_approx_mapq_se(const mem_opt_t *opt, const mem_alnreg_t *a)
void mem_reg2sam_se(const mem_opt_t *opt, const bntseq_t *bns, const uint8_t *pac, bseq1_t *s, mem_alnreg_v *a, int extra_flag, const mem_aln_t *m)
{
kstring_t str;
str.l = str.m = 0; str.s = 0;
if (a->n > 0 && a->a[0].score >= opt->T) {
int k;
kvec_t(mem_aln_t) aa;
int k;
kv_init(aa);
str.l = str.m = 0; str.s = 0;
for (k = 0; k < a->n; ++k) {
mem_alnreg_t *p = &a->a[k];
mem_aln_t *q;
@ -781,15 +781,16 @@ void mem_reg2sam_se(const mem_opt_t *opt, const bntseq_t *bns, const uint8_t *pa
if ((opt->flag&MEM_F_NO_MULTI) && k && p->secondary < 0) q->flag |= 0x10000;
if (k && q->mapq > aa.a[0].mapq) q->mapq = aa.a[0].mapq;
}
for (k = 0; k < aa.n; ++k)
mem_aln2sam(bns, &str, s, aa.n, aa.a, k, m);
for (k = 0; k < aa.n; ++k) free(aa.a[k].cigar);
free(aa.a);
} else {
if (aa.n == 0) { // no alignments good enough; then write an unaligned record
mem_aln_t t;
t = mem_reg2aln(opt, bns, pac, s->l_seq, s->seq, 0);
t.flag |= extra_flag;
mem_aln2sam(bns, &str, s, 1, &t, 0, m);
} else {
for (k = 0; k < aa.n; ++k)
mem_aln2sam(bns, &str, s, aa.n, aa.a, k, m);
for (k = 0; k < aa.n; ++k) free(aa.a[k].cigar);
free(aa.a);
}
s->sam = str.s;
}

2
main.c
View File

@ -3,7 +3,7 @@
#include "utils.h"
#ifndef PACKAGE_VERSION
#define PACKAGE_VERSION "0.7.3-r368-beta"
#define PACKAGE_VERSION "0.7.3-r369-beta"
#endif
int bwa_fa2pac(int argc, char *argv[]);