summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Hildebrandt <afh@surryhill.net>2014-12-23 23:45:39 +0100
committerAlexis Hildebrandt <afh@surryhill.net>2014-12-23 23:45:39 +0100
commitf1478851ee3b8581215e5a017a51f3352bb874bf (patch)
treeea10ee0390f72256a7c7270d339b73488d59345a
parent5b42031ec1812b9f1b0d8641f44c2b1a76bf6265 (diff)
downloadfork-ledger-f1478851ee3b8581215e5a017a51f3352bb874bf.tar.gz
fork-ledger-f1478851ee3b8581215e5a017a51f3352bb874bf.tar.bz2
fork-ledger-f1478851ee3b8581215e5a017a51f3352bb874bf.zip
Fix crash when using --trace 10 or above
uint8_t is typedef'd to char, thus boost::lexical_cast treats it as such instead of a number.
-rw-r--r--src/global.cc2
-rw-r--r--src/utils.cc2
-rw-r--r--src/utils.h2
-rw-r--r--test/baseline/opt-trace.test15
4 files changed, 18 insertions, 3 deletions
diff --git a/src/global.cc b/src/global.cc
index a58bba54..e5a2f809 100644
--- a/src/global.cc
+++ b/src/global.cc
@@ -514,7 +514,7 @@ void handle_debug_options(int argc, char * argv[])
#if TRACING_ON
_log_level = LOG_TRACE;
try {
- _trace_level = boost::lexical_cast<uint8_t>(argv[i + 1]);
+ _trace_level = boost::lexical_cast<uint16_t>(argv[i + 1]);
}
catch (const boost::bad_lexical_cast&) {
throw std::logic_error(_("Argument to --trace must be an integer"));
diff --git a/src/utils.cc b/src/utils.cc
index 741ce79d..7b7c468c 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -574,7 +574,7 @@ std::ostream * _log_stream = &std::cerr;
std::ostringstream _log_buffer;
#if TRACING_ON
-uint8_t _trace_level;
+uint16_t _trace_level;
#endif
static bool logger_has_run = false;
diff --git a/src/utils.h b/src/utils.h
index c3dcf562..95c87929 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -251,7 +251,7 @@ void logger_func(log_level_t level);
#if TRACING_ON
-extern uint8_t _trace_level;
+extern uint16_t _trace_level;
#define SHOW_TRACE(lvl) \
(ledger::_log_level >= ledger::LOG_TRACE && lvl <= ledger::_trace_level)
diff --git a/test/baseline/opt-trace.test b/test/baseline/opt-trace.test
new file mode 100644
index 00000000..9034018e
--- /dev/null
+++ b/test/baseline/opt-trace.test
@@ -0,0 +1,15 @@
+2007/02/02 RD VMMXX
+ Assets:Investments:Vanguard:VMMXX 0.350 VMMXX @ $1.00
+ Income:Dividends:Vanguard:VMMXX $-0.35
+
+; Using values with two or more digits as the argument to the --trace option
+; resulted in a segmentation fault.
+; Since ledger prints debugging information to stderr when the --trace option
+; was given and that debugging information contains timing information, e.g. [1ms]
+; which is likely to differ on each test run, this test only checks that ledger
+; does not crash when the --trace options was specified.
+test reg --trace 10 2>/dev/null
+07-Feb-02 RD VMMXX As:Inves:Vanguar:VMMXX 0.350 VMMXX 0.350 VMMXX
+ In:Divid:Vanguar:VMMXX $-0.35 $-0.35
+ 0.350 VMMXX
+end test