diff options
| author | Aaron Hill <aa1ronham@gmail.com> | 2017-05-16 17:56:11 -0400 |
|---|---|---|
| committer | Joe Wilm <jwilm@users.noreply.github.com> | 2017-05-16 16:23:09 -0700 |
| commit | 86805965e630339ee19e06ecb5fdaf8c21e711ff (patch) | |
| tree | 59355ae89c0e6ebb0e2ec4d5e44e391cf21e3675 /src | |
| parent | 3b70b0d5953e8510d556e96cfb32f288d35dd705 (diff) | |
| download | r-alacritty-vte-86805965e630339ee19e06ecb5fdaf8c21e711ff.tar.gz r-alacritty-vte-86805965e630339ee19e06ecb5fdaf8c21e711ff.tar.bz2 r-alacritty-vte-86805965e630339ee19e06ecb5fdaf8c21e711ff.zip | |
Properly handle maximum number of OSC parameters
Previously, `osc_num_params` would be incremented when the final
parameter finished parsing, even if it was already at `MAX_PARAMS`. This
commit ensures that it is not incremented beyond `MAX_PARAMS`.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib.rs | 29 |
1 files changed, 27 insertions, 2 deletions
@@ -277,6 +277,7 @@ impl Parser { // First param is special - 0 to current byte index 0 => { self.osc_params[param_idx] = (0, idx); + self.osc_num_params += 1; }, // All other params depend on previous indexing @@ -284,10 +285,9 @@ impl Parser { let prev = self.osc_params[param_idx - 1]; let begin = prev.1; self.osc_params[param_idx] = (begin, idx); + self.osc_num_params += 1; } } - self.osc_num_params += 1; - self.osc_dispatch(performer); }, Action::Unhook => performer.unhook(), @@ -475,6 +475,31 @@ mod tests { } #[test] + fn parse_osc_max_params() { + use MAX_PARAMS; + + static INPUT: &'static [u8] = b"\x1b];;;;;;;;;;;;;;;;\x1b"; + + // Create dispatcher and check state + let mut dispatcher = OscDispatcher::default(); + assert_eq!(dispatcher.dispatched_osc, false); + + // Run parser using OSC_BYTES + let mut parser = Parser::new(); + for byte in INPUT { + parser.advance(&mut dispatcher, *byte); + } + + // Check that flag is set and thus osc_dispatch assertions ran. + assert!(dispatcher.dispatched_osc); + assert_eq!(dispatcher.params.len(), MAX_PARAMS); + for param in dispatcher.params.iter() { + assert_eq!(param.len(), 0); + } + + } + + #[test] fn parse_semi_set_underline() { struct CsiDispatcher { params: Vec<Vec<i64>>, |