Skip to content

tagdust segfaults when output files exists already. #2

Description

@ghuls

tagdust segfaults when output files exists already.

It crashes in the free_read_structure(param->read_structure) call for read_structure->numseq_in_segment[0]:

$ tagdust -t 8 -e 0.1 -1 O:N -2 S:ACTCGAGCCGAGCAGGCGCGCCGATC -3 R:NNNNNNNNNNNNNNNNN -4 S:GGACCGGG -5 O:N -o test test.fastq.gz

[2019-12-19 17:13:02]	Tagdust 2.32, Copyright (C) 2013-2019 Timo Lassmann <timolassmann@gmail.com>
[2019-12-19 17:13:02]	cmd: tagdust -t 8 -e 0.1 -1 O:N -2 S:ACTCGAGCCGAGCAGGCGCGCCGATC -3 R:NNNNNNNNNNNNNNNNN -4 S:GGACCGGG -5 O:N -o test test.fastq.gz
[2019-12-19 17:13:02]	Start Run
--------------------------------------------------
[2019-12-19 17:13:03]	Determining threshold for read0.
[2019-12-19 17:13:08]	Long sequence found. Need to realloc model...
[2019-12-19 17:13:47]	Selected Threshold:: 0.015063
1
[2019-12-19 17:14:39]	ERROR: some output files already exists.
2
free_param: 1
free_param: 2
free_read_structure: 1
free_read_structure: 1  loop: 0
free_read_structure: 1  loop: 0 read_structure->numseq_in_segment
free_read_structure: 1  loop: 0 0
free_read_structure: 1  loop: 0 0 freed
free_read_structure: 1  loop: 1
free_read_structure: 1  loop: 1 read_structure->numseq_in_segment
free_read_structure: 1  loop: 1 0
free_read_structure: 1  loop: 1 0 freed
free_read_structure: 1  loop: 1 1
free_read_structure: 1  loop: 1 1 freed
free_read_structure: 1  loop: 2
free_read_structure: 1  loop: 2 read_structure->numseq_in_segment
free_read_structure: 1  loop: 2 0
free_read_structure: 1  loop: 2 0 freed
free_read_structure: 1  loop: 3
free_read_structure: 1  loop: 3 read_structure->numseq_in_segment
free_read_structure: 1  loop: 3 0
free_read_structure: 1  loop: 3 0 freed
free_read_structure: 1  loop: 3 1
free_read_structure: 1  loop: 3 1 freed
free_read_structure: 1  loop: 4
free_read_structure: 1  loop: 4 read_structure->numseq_in_segment
free_read_structure: 1  loop: 4 0
free_read_structure: 1  loop: 4 0 freed
free_read_structure: 2
free_read_structure: 3
free_read_structure: 4
free_read_structure: 5
free_read_structure: 6
free_param: 3
free_param: 3.1
free_read_structure: 1
free_read_structure: 1  loop: 1
Segmentation fault (core dumped)

"Debugging" code:

diff --git a/src/interface.c b/src/interface.c
index e18a80d..98ad7d6 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -710,6 +710,7 @@ int free_param(struct parameters* param)
         char logfile[200];
         FILE* outfile = 0;
         int i,status;
+        printf("free_param: 1\n");
         //if(param->log){
         if(param->outfile){
                 sprintf (logfile, "%s_logfile.txt",param->outfile);
@@ -723,6 +724,7 @@ int free_param(struct parameters* param)
                 fclose(outfile);

         }
+        printf("free_param: 2\n");
         if(param->read_structures){
                 for(i = 0; i < param->infiles;i++){
                         if(param->read_structures[i]){
@@ -731,24 +733,35 @@ int free_param(struct parameters* param)
                 }
                 MFREE(param->read_structures);
         }
+        printf("free_param: 3\n");

         if(param->read_structure){
+            printf("free_param: 3.1\n");
                 free_read_structure(param->read_structure);
+            printf("free_param: 3.2\n");
         }
+        printf("free_param: 4\n");
         if(param->read_structure_R1){
                 free_read_structure(param->read_structure_R1);
         }
+        printf("free_param: 5\n");
         if(param->read_structure_R2){
                 free_read_structure(param->read_structure_R2);
         }
+        printf("free_param: 6\n");
         if(param->confidence_thresholds){
                 MFREE(param->confidence_thresholds);
         }
+        printf("free_param: 7\n");

         MFREE (param->infile);
+        printf("free_param: 8\n");
         MFREE(param->messages);
+        printf("free_param: 9\n");
         MFREE(param->buffer);
+        printf("free_param: 10\n");
         MFREE(param);
+        printf("free_param: 11\n");
         return kslOK;
 ERROR:
         return status;
@@ -861,20 +874,32 @@ ERROR:
 void free_read_structure(struct read_structure* read_structure)
 {
         int i,j;
+        printf("free_read_structure: 1\n");
         for(i = 0; i < 10;i++){
                 if(read_structure->sequence_matrix[i]){
+        printf("free_read_structure: 1  loop: %d\n", i);
+        if (read_structure->numseq_in_segment) {
+            printf("free_read_structure: 1  loop: %d read_structure->numseq_in_segment\n", i);
+        }
                         for(j = 0; j < read_structure->numseq_in_segment[i];j++){
+        printf("free_read_structure: 1  loop: %d %d\n", i, j);
                                 MFREE(read_structure->sequence_matrix[i][j]);
+        printf("free_read_structure: 1  loop: %d %d freed\n", i, j);
                         }

                         MFREE(read_structure->sequence_matrix[i]);
                 }
         }
+        printf("free_read_structure: 2\n");
         MFREE(read_structure->sequence_matrix);

+        printf("free_read_structure: 3\n");
         MFREE(read_structure->numseq_in_segment );
+        printf("free_read_structure: 4\n");
         MFREE(read_structure->type);
+        printf("free_read_structure: 5\n");
         MFREE(read_structure);
+        printf("free_read_structure: 6\n");
 }


diff --git a/src/io.c b/src/io.c
index 5381950..4381f46 100644
--- a/src/io.c
+++ b/src/io.c
@@ -799,10 +799,14 @@ int print_all(struct read_info*** read_info_container,struct parameters* param,
 		i = check_for_existing_demultiplexed_files_multiple(param, num_out_reads);
 		if(i){
 			sprintf(param->buffer,"ERROR: some output files already exists.\n");
+			printf("1\n");
 			param->messages = append_message(param->messages, param->buffer);
+			printf("2\n");
 			free_param(param);
+			printf("3\n");
 			exit(EXIT_FAILURE);
 		}
+		printf("4\n");
 		
 		filemode[0] = 'w';
 		filemode[1] = 0;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions