Skip to content

Commit

Permalink
Merge pull request #79 from AndreaGuarracino/ingenuish
Browse files Browse the repository at this point in the history
less trusting the correctness of the inputs
  • Loading branch information
ekg authored Sep 2, 2021
2 parents 515d382 + b653954 commit 63fb48b
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 9 deletions.
7 changes: 7 additions & 0 deletions src/alignments.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,15 @@ void paf_worker(
std::getline(paf_in, line);
paf_more.store(paf_in.good());
paf_in_mutex.unlock();
// Check if there is something to parse
if (line.empty()) break;
paf_row_t paf(line);
// Check if the coordinates are reasonable
if (paf.query_sequence_length == 0 || paf.target_sequence_length == 0 ||
// Query/Target start (0-based; BED-like; closed)
paf.query_start >= paf.query_sequence_length || paf.query_end > paf.query_sequence_length || paf.query_start >= paf.query_end ||
// Query/Target end (0-based; BED-like; open)
paf.target_start >= paf.target_sequence_length || paf.target_end > paf.target_sequence_length || paf.target_start >= paf.target_end) break;
size_t query_idx = seqidx.rank_of_seq_named(paf.query_sequence_name);
size_t query_len = seqidx.nth_seq_length(query_idx);
size_t target_idx = seqidx.rank_of_seq_named(paf.target_sequence_name);
Expand Down
18 changes: 9 additions & 9 deletions src/paf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ paf_row_t::paf_row_t(const std::string& line) {
std::vector<std::string> fields;
tokenize(line, fields, " \t");
query_sequence_name = fields[0];
query_sequence_length = std::stol(fields[1]);
query_start = std::stol(fields[2]);
query_end = std::stol(fields[3]);
query_sequence_length = std::stoull(fields[1]);
query_start = std::stoull(fields[2]);
query_end = std::stoull(fields[3]);
query_target_same_strand = (fields[4] == "+");
target_sequence_name = fields[5];
target_sequence_length = std::stol(fields[6]);
target_start = std::stol(fields[7]);
target_end = std::stol(fields[8]);
num_matches = std::stol(fields[9]);
alignment_block_length = std::stol(fields[10]);
target_sequence_length = std::stoull(fields[6]);
target_start = std::stoull(fields[7]);
target_end = std::stoull(fields[8]);
num_matches = std::stoull(fields[9]);
alignment_block_length = std::stoull(fields[10]);
mapping_quality = std::stoi(fields[11]);
// find the cigar in the last fields
for (size_t i = 12; i < fields.size(); ++i) {
Expand Down Expand Up @@ -66,7 +66,7 @@ std::vector<std::pair<std::string, uint64_t>> parse_paf_spec(const std::string&
std::vector<std::string> fields;
tokenize(file, fields, ":");
if (fields.size() == 2) {
parsed.push_back(std::make_pair(fields.front(), std::stol(fields.back())));
parsed.push_back(std::make_pair(fields.front(), std::stoull(fields.back())));
} else if (fields.size() == 1) {
parsed.push_back(std::make_pair(fields.front(), 0));
}
Expand Down

0 comments on commit 63fb48b

Please sign in to comment.