From fd0ddf0e22180e94ddba8728de6f211529b72192 Mon Sep 17 00:00:00 2001 From: Peter Jeremy Date: Wed, 11 Apr 2012 09:07:47 +1000 Subject: [PATCH] strtol(3) can optionally set errno to EINVAL if no conversion could be performed and FreeBSD (at least) implements thin behaviour. Add an explicit test to detect this situation in Dispatcher::parse_params(). (This behaviour difference is not relevant to other uses of strtol()). This corrects the mishandling of (eg) "CSI m" on FreeBSD. Closes #129 github pull request. [keithw -- also fixes same issue with mosh-server on OS X] --- src/terminal/terminaldispatcher.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/terminal/terminaldispatcher.cc b/src/terminal/terminaldispatcher.cc index 87ebaf8..ae02bff 100644 --- a/src/terminal/terminaldispatcher.cc +++ b/src/terminal/terminaldispatcher.cc @@ -85,7 +85,7 @@ void Dispatcher::parse_params( void ) if ( endptr == segment_begin ) { val = -1; } - if ( errno == 0 ) { + if ( errno == 0 || segment_begin == endptr ) { parsed_params.push_back( val ); } @@ -99,7 +99,7 @@ void Dispatcher::parse_params( void ) if ( endptr == segment_begin ) { val = -1; } - if ( errno == 0 ) { + if ( errno == 0 || segment_begin == endptr ) { parsed_params.push_back( val ); }