Skip to content

Panic in Minifier::minify Due to Invalid RGB Value #15

@rfuzz

Description

@rfuzz

Hello, while fuzz testing the current crate, I found that during the minification process, the original data is parsed. However, if there is an invalid RGB value, it directly causes the program to panic:

use css_minify::optimizations::{Minifier, Level};

fn main() {
    let s = r#"
.class {
    Color: rgb(255, 255, 999);
}
    "#;
    match Minifier::default().minify(s, Level::Three) {
        Ok(_) => println!("OK"),
        Err(e) => println!("Error: {}", e),
    } 
}

This crash occurs at any optimization level other than Level::Zero, and the following error is raised:

thread 'main' panicked at /home/ubuntu/css-minify/css-minify/src/optimizations/color.rs:48:48:
called `Result::unwrap()` on an `Err` value: ParseIntError { kind: PosOverflow }
stack backtrace:
   0: rust_begin_unwind
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/std/src/panicking.rs:665:5
   1: core::panicking::panic_fmt
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/panicking.rs:74:14
   2: core::result::unwrap_failed
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/result.rs:1695:5
   3: core::result::Result<T,E>::unwrap
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/result.rs:1103:23
   4: css_minify::optimizations::color::parse_rgb::{{closure}}
             at /home/ubuntu/css-minify/css-minify/src/optimizations/color.rs:48:25
   5: nom::combinator::map::{{closure}}
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/nom-7.1.3/src/combinator/mod.rs:80:16
   6: <F as nom::internal::Parser<I,O,E>>::parse
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/nom-7.1.3/src/internal.rs:325:5
   7: nom::sequence::preceded::{{closure}}
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/nom-7.1.3/src/sequence/mod.rs:73:5
   8: <F as nom::internal::Parser<I,O,E>>::parse
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/nom-7.1.3/src/internal.rs:325:5
   9: nom::sequence::terminated::{{closure}}
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/nom-7.1.3/src/sequence/mod.rs:106:23
  10: css_minify::optimizations::color::parse_rgb
             at /home/ubuntu/css-minify/css-minify/src/optimizations/color.rs:34:5
  11: core::ops::function::FnMut::call_mut
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/ops/function.rs:166:5
  12: <F as nom::internal::Parser<I,O,E>>::parse
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/nom-7.1.3/src/internal.rs:325:5
  13: <(A,B) as nom::branch::Alt<Input,Output,Error>>::choice
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/nom-7.1.3/src/branch/mod.rs:146:11
  14: nom::branch::alt::{{closure}}
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/nom-7.1.3/src/branch/mod.rs:50:15
  15: css_minify::optimizations::color::optimize_color
             at /home/ubuntu/css-minify/css-minify/src/optimizations/color.rs:14:5
  16: <css_minify::optimizations::Minifier as core::default::Default>::default::{{closure}}
             at /home/ubuntu/css-minify/css-minify/src/optimizations/mod.rs:69:13
  17: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/alloc/src/boxed.rs:2467:9
  18: <css_minify::optimizations::transformer::Transformer as css_minify::optimizations::transformer::Transform>::transform_parameters::{{closure}}
             at /home/ubuntu/css-minify/css-minify/src/optimizations/transformer.rs:31:69
  19: core::iter::adapters::map::map_fold::{{closure}}
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/iter/adapters/map.rs:88:28
  20: core::iter::traits::iterator::Iterator::fold
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/iter/traits/iterator.rs:2584:21
  21: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/iter/adapters/map.rs:128:9
  22: core::iter::traits::iterator::Iterator::for_each
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/iter/traits/iterator.rs:813:9
  23: <indexmap::map::IndexMap<K,V,S> as core::iter::traits::collect::Extend<(K,V)>>::extend
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/indexmap-2.6.0/src/map.rs:1525:9
  24: <indexmap::map::IndexMap<K,V,S> as core::iter::traits::collect::FromIterator<(K,V)>>::from_iter
             at /home/ubuntu/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/indexmap-2.6.0/src/map.rs:1473:9
  25: core::iter::traits::iterator::Iterator::collect
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/iter/traits/iterator.rs:2001:9
  26: <css_minify::optimizations::transformer::Transformer as css_minify::optimizations::transformer::Transform>::transform_parameters
             at /home/ubuntu/css-minify/css-minify/src/optimizations/transformer.rs:24:9
  27: css_minify::optimizations::transformer::Transform::transform
             at /home/ubuntu/css-minify/css-minify/src/optimizations/transformer.rs:46:36
  28: css_minify::optimizations::transformer::Transform::transform_many::{{closure}}
             at /home/ubuntu/css-minify/css-minify/src/optimizations/transformer.rs:102:50
  29: core::iter::adapters::map::map_try_fold::{{closure}}
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/iter/adapters/map.rs:95:28
  30: <alloc::vec::into_iter::IntoIter<T,A> as core::iter::traits::iterator::Iterator>::try_fold
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/alloc/src/vec/into_iter.rs:346:25
  31: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/iter/adapters/map.rs:121:9
  32: <I as alloc::vec::in_place_collect::SpecInPlaceCollect<T,I>>::collect_in_place
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/alloc/src/vec/in_place_collect.rs:378:13
  33: alloc::vec::in_place_collect::from_iter_in_place
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/alloc/src/vec/in_place_collect.rs:269:9
  34: alloc::vec::in_place_collect::<impl alloc::vec::spec_from_iter::SpecFromIter<T,I> for alloc::vec::Vec<T>>::from_iter
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/alloc/src/vec/in_place_collect.rs:245:9
  35: <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/alloc/src/vec/mod.rs:3355:9
  36: core::iter::traits::iterator::Iterator::collect
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/iter/traits/iterator.rs:2001:9
  37: css_minify::optimizations::transformer::Transform::transform_many
             at /home/ubuntu/css-minify/css-minify/src/optimizations/transformer.rs:102:21
  38: css_minify::optimizations::Minifier::minify::{{closure}}
             at /home/ubuntu/css-minify/css-minify/src/optimizations/mod.rs:57:31
  39: core::result::Result<T,E>::map
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/result.rs:772:25
  40: css_minify::optimizations::Minifier::minify
             at /home/ubuntu/css-minify/css-minify/src/optimizations/mod.rs:56:22
  41: css_minify_fuzz_target_test::main
             at ./src/main.rs:11:11
  42: core::ops::function::FnOnce::call_once
             at /rustc/ed04567ba1d5956d1080fb8121caa005ce059e12/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Version: commit 77f1aa59df3c163621ee6373095672f00a1b63cf

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions