Skip to content

Commit

Permalink
[bugfix] Stop execution when invalid input detected
Browse files Browse the repository at this point in the history
If value provided by user for rounding is 0, trigger fatal error
signaling 0 is not valid input.
  • Loading branch information
oceanofthelost committed Jan 24, 2023
1 parent e5c1dde commit 87d1fd9
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 29 deletions.
3 changes: 3 additions & 0 deletions doc/dictionaries/names.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
aefinish
aenbr
Alin
Alling
Altera
Anselmi
AOMF
Expand Down Expand Up @@ -84,6 +85,7 @@ netpmb
Niederstrasser
Nivas
NSIS
oceanofthelost
opensource
Ozcelik
patryks
Expand All @@ -105,6 +107,7 @@ rpmbuild
Sadowski
Schmitt
SDSMAC
Sean
segfault
Seitz
Sergeev
Expand Down
12 changes: 12 additions & 0 deletions srecord/arglex/tool/get_number.cc
Original file line number Diff line number Diff line change
Expand Up @@ -98,20 +98,32 @@ srecord::arglex_tool::get_number(const char *caption)
case token_round_down:
token_next();
multiple = get_number("-round-down");
if (multiple == 0)
{
fatal_error("-Round_Down value must not be 0");
}
value /= multiple;
value *= multiple;
break;

case token_round_up:
token_next();
multiple = get_number("-round-up");
if (multiple == 0)
{
fatal_error("-Round_Up value must not be 0");
}
value = (value + multiple - 1) / multiple;
value *= multiple;
break;

case token_round_nearest:
token_next();
multiple = get_number("-round-nearest");
if (multiple == 0)
{
fatal_error("-Round_Nearest value must not be 0");
}
value = (value + multiple / 2) / multiple;
value *= multiple;
break;
Expand Down
18 changes: 9 additions & 9 deletions test/02/t0262a.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh
#
# srecord - Manipulate EPROM load files
# Copyright (C) 2014 Markus Heidelberg
# Copyright (C) 2023 Sean Alling
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
Expand All @@ -20,15 +20,15 @@
TEST_SUBJECT="-Round_Up"
. test_prelude.sh

srec_cat -generate 0 8 -constant 0 -offset - 1 -Round_Up 0 \
2> test.out

if test $? -ne 1; then fail; fi

cat > test.ok << 'fubar'
S00600004844521B
S306FFFFFFFE00FE
S5030001FB
srec_cat: -Round_Up value must not be 0
fubar
if test $? -ne 0; then no_result; fi

srec_cat test.in -offset - 1 -Round_Up 0 -o test.out

if test $? -ne 1; then fail; fi

pass
diff -u test.ok test.out
if test $? -ne 0; then fail; fi
19 changes: 9 additions & 10 deletions test/02/t0263a.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh
#
# srecord - Manipulate EPROM load files
# Copyright (C) 2014 Markus Heidelberg
# Copyright (C) 2023 Sean Alling
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
Expand All @@ -20,16 +20,15 @@
TEST_SUBJECT="-Round_Down"
. test_prelude.sh

cat > test.ok << 'fubar'
S00600004844521B
S306FFFFFFFE00FE
S5030001FB
fubar
if test $? -ne 0; then no_result; fi

srec_cat test.in -offset - 1 -Round_Down 0 -o test.out
srec_cat -generate 0 8 -constant 0 -offset - 1 -Round_Up 0 \
2> test.out

if test $? -ne 1; then fail; fi

cat > test.ok << 'fubar'
srec_cat: -Round_Up value must not be 0
fubar
if test $? -ne 0; then no_result; fi

pass
diff -u test.ok test.out
if test $? -ne 0; then fail; fi
19 changes: 9 additions & 10 deletions test/02/t0264a.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh
#
# srecord - Manipulate EPROM load files
# Copyright (C) 2014 Markus Heidelberg
# Copyright (C) 2023 Sean Alling
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
Expand All @@ -20,16 +20,15 @@
TEST_SUBJECT="-Round_Nearest"
. test_prelude.sh

cat > test.ok << 'fubar'
S00600004844521B
S306FFFFFFFE00FE
S5030001FB
fubar
if test $? -ne 0; then no_result; fi

srec_cat test.in -offset - 1 -Round_Nearest 0 -o test.out
srec_cat -generate 0 8 -constant 0 -offset - 1 -Round_Nearest 0 \
2> test.out

if test $? -ne 1; then fail; fi

cat > test.ok << 'fubar'
srec_cat: -Round_Nearest value must not be 0
fubar
if test $? -ne 0; then no_result; fi

pass
diff -u test.ok test.out
if test $? -ne 0; then fail; fi

0 comments on commit 87d1fd9

Please sign in to comment.