Comments (3)
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.
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.
fixed many releases ago
from dcc.
Related Issues (20)
- report multidimensional array bounds (incomplete type) errors better.
- can not override dcc's implict -Wunused-variable flag HOT 1
- dcc doesn't accept - for stdin HOT 1
- dcc asan fails to report uninit error when compiled with intermediary object file HOT 1
- dcc dual sanitizer desynchronization when printing pointers HOT 1
- Remap dcc++ to d++ HOT 2
- function name wrongly assumed to be printf for -Wformat-insufficient-args HOT 1
- missign function return type incorrectlky assumed for -Wimplicit-int HOT 1
- values close to the memory poison values not flagged as uninitialized HOT 1
- feature request - report pointer values as pointing to variable HOT 1
- feature request - capture stdin HOT 1
- Uninitialised error detection when using fread HOT 2
- enhancement - give specific (helpful) error for failure to null-terminate string
- fileno broken HOT 1
- printf "%s\n" of a NULL value produces incorrect explanation
- warning NULL argument for printf %s would benefit from explanation
- Request: add explanations of capabilities/limitations to README
- delayed unintialised error when writing to files
- [Docs] help2man man-page generation is missing a [DESCRIPTION] section
- a case where the expected "dcc explanation" output is not generated
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dcc.