Imported Upstream version 1.2.1
[packages/binwalk.git] / support / lzma_gen.py
index 4383380..9e4fbd9 100755 (executable)
@@ -3,7 +3,6 @@
 
 
 properties = [
-       0x5D,
        0x01,
        0x02,
        0x03,
@@ -36,6 +35,7 @@ properties = [
        0x5A,
        0x5B,
        0x5C,
+       0x5D,
        0x5E,
        0x63,
        0x64,
@@ -79,6 +79,7 @@ properties = [
        0xD8,
 ]
 
+min_properties = 0x40
 common_properties = [0x5D, 0x6D]
 
 dictionary_sizes = [
@@ -95,11 +96,11 @@ dictionary_sizes = [
 ]
 
 for fbyte in properties:
-#      if fbyte not in common_properties:
-#              fexclude = '{filter-exclude}'
-#      else:
-#              fexclude = ''
-       fexclude = ''
+       if fbyte < min_properties:
+               fexclude = '{filter-exclude}'
+               continue
+       else:
+               fexclude = ''
 
        sig = '\n# ------------------------------------------------------------------\n'
        sig += '# Signature for LZMA compressed data with valid properties byte 0x%.2X\n' % fbyte
@@ -122,9 +123,10 @@ for fbyte in properties:
 
        sig += '>1\t\tlelong\tx\t\tdictionary size: %d bytes,\n'
        
-       sig += '\n# Assume that a valid size will be less than 1GB. This could technically be valid, but is unlikely.\n'
-       sig += '>5\t\tlequad\t<1\t\tinvalid\n'
-       sig += '>5\t\tlequad\t>0x40000000\tinvalid\n'
+       sig += '\n# Assume that a valid size will be greater than 32 bytes and less than 1GB (a value of -1 IS valid).\n# This could technically be valid, but is unlikely.\n'
+       sig += '>5\t\tlequad\t!-1\n'
+       sig += '>>5\t\tlequad\t<32\t\tinvalid\n'
+       sig += '>>5\t\tlequad\t>0x40000000\tinvalid\n'
 
        sig += '\n# These are not 100%. The uncompressed size could be exactly the same as the dicionary size, but it is unlikely.\n'
        sig += '# Since most false positives are the result of repeating sequences of bytes (such as executable instructions),\n'