소스 검색

LibCompress: fail gracefuly on invalid symbols in DeflateDecompressor

Idan Horowitz 4 년 전
부모
커밋
ea7bdf02b8
1개의 변경된 파일2개의 추가작업 그리고 2개의 파일을 삭제
  1. 2 2
      Userland/Libraries/LibCompress/Deflate.cpp

+ 2 - 2
Userland/Libraries/LibCompress/Deflate.cpp

@@ -150,7 +150,7 @@ bool DeflateDecompressor::CompressedBlock::try_read_more()
 
     const auto symbol = m_literal_codes.read_symbol(m_decompressor.m_input_stream);
 
-    if (symbol == UINT32_MAX) {
+    if (symbol >= 286) { // invalid deflate literal/length symbol
         m_decompressor.set_fatal_error();
         return false;
     }
@@ -169,7 +169,7 @@ bool DeflateDecompressor::CompressedBlock::try_read_more()
 
         const auto length = m_decompressor.decode_length(symbol);
         const auto distance_symbol = m_distance_codes.value().read_symbol(m_decompressor.m_input_stream);
-        if (distance_symbol == UINT32_MAX) {
+        if (distance_symbol >= 30) { // invalid deflate distance symbol
             m_decompressor.set_fatal_error();
             return false;
         }