Giter Club home page Giter Club logo

Comments (3)

andrewjbennett avatar andrewjbennett commented on September 12, 2024

Here's the output from DCC_DEBUG=100 and running it with the echo at the end:

sanitizer1: __dcc_start debug_level=100
sanitizer1: setenv DCC_SANITIZER=ADDRESS
sanitizer1: setenv DCC_PATH=/tmp_amd/adams/export/adams/1/cs1911/bin/dcc
sanitizer1: setenv DCC_PID=126378
sanitizer1: initialized 0x7fffbed45310 to 0x7fffbf12d310
sanitizer1: setenv DCC_BINARY=/tmp_amd/ravel/export/ravel/2/andrewb/comp1511/19T3/test/dcc-autotest-idk/remove_repeated_lines
sanitizer1: setenv DCC_UNLINK=/tmp/dcc-26FNwk
sanitizer1: setenv DCC_SANITIZER1_PID=126378
sanitizer1: setenv DCC_SANITIZER2_PID=126379
sanitizer1: main sanitizer1
sanitizer1: setenv DCC_PID=126379
sanitizer1: setenv DCC_SANITIZER2_PID=126379
sanitizer1: main sanitizer2
sanitizer1: setenv DCC_PIPE_TO_CHILD=3
sanitizer1: setenv DCC_PIPE_FROM_CHILD=6
sanitizer1: setenv DCC_ARGV0=./remove_repeated_lines
sanitizer1: setenv DCC_BINARY=/tmp/dcc-26FNwk
sanitizer1: command=python3 -E -c "import io,os,sys,tarfile,tempfile
with tempfile.TemporaryDirectory() as temp_dir:
 buffer = io.BytesIO(sys.stdin.buffer.raw.read(10416))
 if len(buffer.getbuffer()) == 10416:
  tarfile.open(fileobj=buffer, bufsize=10416, mode='r|xz').extractall(temp_dir)
  os.chdir(temp_dir)
  exec(open('watch_valgrind.py').read())
"
sanitizer1: initialized 0x7fffbed452d0 to 0x7fffbf12d2d0
sanitizer1: setenv DCC_VALGRIND_RUNNING=1
sanitizer1: valgrind_argv[0] = /usr/bin/valgrind
sanitizer1: valgrind_argv[1] = --log-fd=5
sanitizer1: valgrind_argv[2] = -q
sanitizer1: valgrind_argv[3] = --vgdb=yes
sanitizer1: valgrind_argv[4] = --leak-check=no
sanitizer1: valgrind_argv[5] = --suppressions=/dev/null
sanitizer1: valgrind_argv[6] = --max-stackframe=16000000
sanitizer1: valgrind_argv[7] = --partial-loads-ok=no
sanitizer1: valgrind_argv[8] = --malloc-fill=0xbe
sanitizer1: valgrind_argv[9] = --free-fill=0xbe
sanitizer1: valgrind_argv[10] = --vgdb-error=1
sanitizer1: valgrind_argv[11] = /tmp/dcc-26FNwk
sanitizer1: synchronize_system_call(read, 8192)
watch_valgrind() running
valgrind:  ==126379== 
valgrind:  ==126379== TO DEBUG THIS PROCESS USING GDB: start GDB like this
valgrind:  ==126379==   /path/to/gdb /tmp/dcc-26FNwk
valgrind:  ==126379== and then give GDB the following command
valgrind:  ==126379==   target remote | /usr/lib/valgrind/../../bin/vgdb --pid=126379
valgrind:  ==126379== --pid is optional if only one valgrind process is running
valgrind:  ==126379== 
sanitizer2: 	__dcc_start debug_level=100
sanitizer2: 	setenv DCC_SANITIZER=VALGRIND
sanitizer2: 	setenv DCC_PATH=/tmp_amd/adams/export/adams/1/cs1911/bin/dcc
sanitizer2: 	setenv DCC_PID=126379
sanitizer2: 	initialized 0x1ffec17e90 to 0x1ffefffe90
sanitizer2: 	initialized 0x1ffec17f10 to 0x1ffeffff10
sanitizer2: 	synchronize_system_call(read, 8192)
sanitizer1: synchronize_system_call(read, 8192) returning
sanitizer1: synchronize_system_call_result(read, 123)
sanitizer1: synchronize_system_call_result(read) returning 123
sanitizer1: initialized 0x7fffbf0de5e0 to 0x7fffbf11cde0
sanitizer1: _Unwind_Backtrace
sanitizer1: disconnect_sanitizers()
sanitizer1: killing sanitizer2 pid=126379 and unlinking executable
sanitizer1: running python3 -B -E -c "import io,os,sys,tarfile,tempfile
with tempfile.TemporaryDirectory() as temp_dir:
  buffer = io.BytesIO(sys.stdin.buffer.raw.read())
  buffer_length = len(buffer.getbuffer())
  if not buffer_length:
    sys.exit(1)
  tarfile.open(fileobj=buffer, bufsize=buffer_length, mode='r|xz').extractall(temp_dir)
  os.chdir(temp_dir)
  exec(open('start_gdb.py').read())
"
watch_valgrind() - exiting
DCC_PID=126378 DCC_SANITIZER1_PID=126378 DCC_SANITIZER2_PID=126379 DCC_BINARY=/tmp_amd/ravel/export/ravel/2/andrewb/comp1511/19T3/test/remove_repeated_lines
running: ['gdb', '--nx', '--batch', '-ex', "python exec(open('drive_gdb.py', encoding='utf-8', errors='replace').read())", '/tmp_amd/ravel/export/ravel/2/andrewb/comp1511/19T3/test/remove_repeated_lines']
attaching gdb to  126378
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
__GI___waitpid_nocancel (pid=126394, stat_loc=stat_loc@entry=0x7fffbf11c4d0, options=options@entry=0) at ../sysdeps/unix/sysv/linux/waitpid_nocancel.c:31
31	../sysdeps/unix/sysv/linux/waitpid_nocancel.c: No such file or directory.
explain_error() starting

gdb.execute: where
gdb.execute: -> #0  __GI___waitpid_nocancel (pid=126394, stat_loc=stat_loc@entry=0x7fffbf11c4d0, options=options@entry=0) at ../sysdeps/unix/sysv/linux/waitpid_nocancel.c:31
#1  0x00007fa3aeddb67d in _IO_new_proc_close (fp=0x611000000040) at iopopen.c:246
#2  0x00007fa3aede5eb8 in _IO_new_file_close_it (fp=fp@entry=0x611000000040) at libioP.h:839
#3  0x00007fa3aedd9b0f in fclose () at iofclose.c:53
#4  0x00007fa3af16ce65 in fclose () from /usr/lib/clang/7.0.1/lib/linux/libclang_rt.asan-x86_64.so
#5  0x000000000040766c in _explain_error () at <stdin>:1060
#6  0x00000000004076ab in _Unwind_Backtrace (a=0x7fa3af0ed150) at <stdin>:928
#7  0x00007fa3af0ed224 in ?? () from /usr/lib/clang/7.0.1/lib/linux/libclang_rt.asan-x86_64.so
#8  0x00007fa3af18899b in strcpy () from /usr/lib/clang/7.0.1/lib/linux/libclang_rt.asan-x86_64.so
#9  0x0000000000403bf9 in main () at remove_repeated_lines.c:18


Stack:
 #0  __GI___waitpid_nocancel (pid=126394, stat_loc=stat_loc@entry=0x7fffbf11c4d0, options=options@entry=0) at ../sysdeps/unix/sysv/linux/waitpid_nocancel.c:31
#1  0x00007fa3aeddb67d in _IO_new_proc_close (fp=0x611000000040) at iopopen.c:246
#2  0x00007fa3aede5eb8 in _IO_new_file_close_it (fp=fp@entry=0x611000000040) at libioP.h:839
#3  0x00007fa3aedd9b0f in fclose () at iofclose.c:53
#4  0x00007fa3af16ce65 in fclose () from /usr/lib/clang/7.0.1/lib/linux/libclang_rt.asan-x86_64.so
#5  0x000000000040766c in _explain_error () at <stdin>:1060
#6  0x00000000004076ab in _Unwind_Backtrace (a=0x7fa3af0ed150) at <stdin>:928
#7  0x00007fa3af0ed224 in ?? () from /usr/lib/clang/7.0.1/lib/linux/libclang_rt.asan-x86_64.so
#8  0x00007fa3af18899b in strcpy () from /usr/lib/clang/7.0.1/lib/linux/libclang_rt.asan-x86_64.so
#9  0x0000000000403bf9 in main () at remove_repeated_lines.c:18
 

parse_gdb_stack_frame False #0  __GI___waitpid_nocancel (pid=126394, stat_loc=stat_loc@entry=0x7fffbf11c4d0, options=options@entry=0) at ../sysdeps/unix/sysv/linux/waitpid_nocancel.c:31
parse_gdb_stack_frame False #1  0x00007fa3aeddb67d in _IO_new_proc_close (fp=0x611000000040) at iopopen.c:246
parse_gdb_stack_frame False #2  0x00007fa3aede5eb8 in _IO_new_file_close_it (fp=fp@entry=0x611000000040) at libioP.h:839
parse_gdb_stack_frame True #3  0x00007fa3aedd9b0f in fclose () at iofclose.c:53
parse_gdb_stack_frame False #4  0x00007fa3af16ce65 in fclose () from /usr/lib/clang/7.0.1/lib/linux/libclang_rt.asan-x86_64.so
parse_gdb_stack_frame False #5  0x000000000040766c in _explain_error () at <stdin>:1060
parse_gdb_stack_frame False #6  0x00000000004076ab in _Unwind_Backtrace (a=0x7fa3af0ed150) at <stdin>:928
parse_gdb_stack_frame False #7  0x00007fa3af0ed224 in ?? () from /usr/lib/clang/7.0.1/lib/linux/libclang_rt.asan-x86_64.so
parse_gdb_stack_frame False #8  0x00007fa3af18899b in strcpy () from /usr/lib/clang/7.0.1/lib/linux/libclang_rt.asan-x86_64.so
parse_gdb_stack_frame True #9  0x0000000000403bf9 in main () at remove_repeated_lines.c:18
gdb.execute: frame 9
#9  0x0000000000403bf9 in main () at remove_repeated_lines.c:18
18	        strcpy(line[row],character);
gdb.execute: -> 
Execution stopped in main() in remove_repeated_lines.c at line 18:

        int array_size = 0;
        while ((array_size < 256) && (scanned_in_value != '\n')) {
            character[array_size] = scanned_in_value;
            array_size = array_size + 1;
            scanned_in_value = getchar();
        }
-->     strcpy(line[row],character);
        int repeat = check(character, line);
        if (repeat == 0) {
            int counter = array_size - 1;
extract_expressions c_source= int array_size = 0;
while ((array_size < 256) && (scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  array_size = 0;
while ((array_size < 256) && (scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= array_size = 0;
while ((array_size < 256) && (scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  = 0;
while ((array_size < 256) && (scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= while ((array_size < 256) && (scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  ((array_size < 256) && (scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= array_size < 256) && (scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  < 256) && (scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= ] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= ;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= ();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= (line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= ],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= );
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= check(character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= (character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= character, line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= , line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= line);
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= );
if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= if (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  (repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source= repeat == 0) {
int counter = array_size - 1;

extract_expressions c_source=  == 0) {
int counter = array_size - 1;

extract_expressions c_source= int counter = array_size - 1;

extract_expressions c_source=  counter = array_size - 1;

extract_expressions c_source= counter = array_size - 1;

extract_expressions c_source=  = array_size - 1;

extract_expressions c_source= array_size - 1;

extract_expressions c_source=  - 1;

extract_expressions c_source= 
relevant_variables expressions= int array_size = 0;
while ((array_size < 256) && (scanned_in_value != )) {
character[array_size] = scanned_in_value;
array_size = array_size + 1;
scanned_in_value = getchar();
}
strcpy(line[row],character);
int repeat = check(character, line);
if (repeat == 0) {
int counter = array_size - 1;
 ['int', 'array_size', 'while', 'array_size', 'scanned_in_value', 'character', 'array_size', 'character[array_size]', 'array_size', 'scanned_in_value', 'array_size', 'array_size', 'scanned_in_value', 'getchar', 'strcpy', 'line', 'row', 'line[row]', 'row', 'character', 'int', 'repeat', 'check', 'character', 'line', 'if', 'repeat', 'int', 'counter', 'array_size']
evaluate_expression: array_size
gdb.execute: whatis array_size
gdb.execute: -> type = int

expression_type= int
gdb_evaluate: array_size
gdb.execute: print array_size
gdb.execute: -> $1 = 22

-> 22
clarify_value expression_value= 22
evaluate_expression: character
gdb.execute: whatis character
gdb.execute: -> type = char [256]

expression_type= char [256]
gdb_evaluate: character
gdb.execute: print character
gdb.execute: -> $2 = "Simpson, Homer Simpson", '\276' <repeats 234 times>

-> "Simpson, Homer Simpson", '\276' <repeats 234 times>
clarify_value expression_value= "Simpson, Homer Simpson", '\276' <repeats 234 times>
evaluate_expression: check
gdb.execute: whatis check
gdb.execute: -> type = int (char *, char (*)[256])

expression_type= int (char *, char (*)[256])
evaluate_expression: counter
gdb.execute: whatis counter
gdb.execute No symbol "counter" in current context.
gdb.execute: -> 
expression_type= 
gdb_evaluate: counter
gdb.execute: print counter
gdb.execute No symbol "counter" in current context.
gdb.execute: -> 
-> 
evaluate_expression: getchar
gdb.execute: whatis getchar
gdb.execute: -> type = int (void)

expression_type= int (void)
evaluate_expression: line
gdb.execute: whatis line
gdb.execute: -> type = char [256][256]

expression_type= char [256][256]
gdb_evaluate: line
gdb.execute: print line
gdb.execute: -> $3 = {'\276' <repeats 256 times> <repeats 256 times>}

-> {'\276' <repeats 256 times> <repeats 256 times>}
clarify_value expression_value= {'\276' <repeats 256 times> <repeats 256 times>}
evaluate_expression: repeat
gdb.execute: whatis repeat
gdb.execute: -> type = int

expression_type= int
gdb_evaluate: repeat
gdb.execute: print repeat
gdb.execute: -> $4 = -1094795586

-> -1094795586
clarify_value expression_value= -1094795586
evaluate_expression: row
gdb.execute: whatis row
gdb.execute: -> type = int

expression_type= int
gdb_evaluate: row
gdb.execute: print row
gdb.execute: -> $5 = 0

-> 0
clarify_value expression_value= 0
evaluate_expression: scanned_in_value
gdb.execute: whatis scanned_in_value
gdb.execute: -> type = int

expression_type= int
gdb_evaluate: scanned_in_value
gdb.execute: print scanned_in_value
gdb.execute: -> $6 = 10

-> 10
clarify_value expression_value= 10
evaluate_expression: strcpy
gdb.execute: whatis strcpy
gdb.execute: -> type = <text variable, no debug info>

expression_type= <text variable, no debug info>
evaluate_expression: character[array_size]
gdb.execute: whatis character[array_size]
gdb.execute: -> type = char

expression_type= char
gdb_evaluate: character[array_size]
gdb.execute: print character[array_size]
gdb.execute: -> $7 = -66 '\276'

-> -66 '\276'
clarify_value expression_value= -66 '\276'
evaluate_expression: line[row]
gdb.execute: whatis line[row]
gdb.execute: -> type = char [256]

expression_type= char [256]
gdb_evaluate: line[row]
gdb.execute: print line[row]
gdb.execute: -> $8 = '\276' <repeats 256 times>

-> '\276' <repeats 256 times>
clarify_value expression_value= '\276' <repeats 256 times>

Values when execution stopped:

array_size = 22
character = "Simpson, Homer Simpson", <234 uninitialized values>
line = {<256 uninitialized values> <repeats 256 times>}
repeat = <uninitialized value>
row = 0
scanned_in_value = 10
character[array_size] = <uninitialized value>
line[row] = <256 uninitialized values>
gdb.execute: call __dcc_error_exit()
sanitizer1: __dcc_error_exit()
sanitizer1: __dcc_cleanup_before_exit
sanitizer1: __dcc_check_output_exit
sanitizer1: disconnect_sanitizers()
sanitizer1: set_signals_default()
sanitizer1: waiting

Program received signal SIGPIPE, Broken pipe.
0x00007fa3aeda1b37 in kill () at ../sysdeps/unix/syscall-template.S:78
gdb.execute The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on".
Evaluation of the expression containing the function
(__dcc_error_exit) will be abandoned.
When the function is done executing, GDB will silently stop.
gdb.execute: -> 
gdb.execute: quit

from dcc.

andrewjbennett avatar andrewjbennett commented on September 12, 2024

Running with just -fsanitize=valgrind does print out an error:

Runtime error: uninitialized variable accessed.

Execution stopped in main() in remove_repeated_lines.c at line 18:

        int array_size = 0;
        while ((array_size < 256) && (scanned_in_value != '\n')) {
            character[array_size] = scanned_in_value;
            array_size = array_size + 1;
            scanned_in_value = getchar();
        }
-->     strcpy(line[row],character);
        int repeat = check(character, line);
        if (repeat == 0) {
            int counter = array_size - 1;

Values when execution stopped:

array_size = 22
character = "Simpson, Homer Simpson", <234 uninitialized values>
line = {"Simpson, Homer Simpson", <234 uninitialized values>, <256 uninitialized values> <repeats 255 times>}
repeat = <uninitialized value>
row = 0
scanned_in_value = 10
character[array_size] = <uninitialized value>
line[row] = "Simpson, Homer Simpson", <234 uninitialized values>

Running with just -fsanitize=address doesn't:

Execution stopped in main() in remove_repeated_lines.c at line 18:

        int array_size = 0;
        while ((array_size < 256) && (scanned_in_value != '\n')) {
            character[array_size] = scanned_in_value;
            array_size = array_size + 1;
            scanned_in_value = getchar();
        }
-->     strcpy(line[row],character);
        int repeat = check(character, line);
        if (repeat == 0) {
            int counter = array_size - 1;

Values when execution stopped:

array_size = 22
character = "Simpson, Homer Simpson", <234 uninitialized values>
line = {<256 uninitialized values> <repeats 256 times>}
repeat = <uninitialized value>
row = 0
scanned_in_value = 10
character[array_size] = <uninitialized value>
line[row] = <256 uninitialized values>

Running with 3c doesn't report any error at all:

$ 2521 3c remove_repeated_lines.c -o remove_repeated_lines_3c
$ echo (stuff from above) | ./remove_repeated_lines_3c

nospmiS remoH ,nospmiS
yrotsih ni yug tsetaerg eht s'eH
eht morF 
dleifgnirpS fo nwoT 
.eert tuntsehc a tih ot tuoba s'eH 

from dcc.

andrew-taylor avatar andrew-taylor commented on September 12, 2024

fixed many releases ago

from dcc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.