libmspack 0.0.5 → 0.10.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/rake.yml +37 -0
  3. data/.gitignore +2 -0
  4. data/.yardopts +1 -1
  5. data/README.md +1 -1
  6. data/Rakefile +11 -5
  7. data/ext/Rakefile +1 -1
  8. data/ext/libmspack/AUTHORS +1 -0
  9. data/ext/libmspack/ChangeLog +321 -4
  10. data/ext/libmspack/INSTALL +368 -0
  11. data/ext/libmspack/Makefile.am +86 -95
  12. data/ext/libmspack/Makefile.in +1729 -0
  13. data/ext/libmspack/README +30 -30
  14. data/ext/libmspack/acinclude.m4 +99 -0
  15. data/ext/libmspack/aclocal.m4 +1218 -0
  16. data/ext/libmspack/ar-lib +270 -0
  17. data/ext/libmspack/compile +347 -0
  18. data/ext/libmspack/config.guess +1480 -0
  19. data/ext/libmspack/config.h.in +129 -0
  20. data/ext/libmspack/config.sub +1801 -0
  21. data/ext/libmspack/configure +15487 -0
  22. data/ext/libmspack/configure.ac +11 -13
  23. data/ext/libmspack/depcomp +791 -0
  24. data/ext/libmspack/install-sh +508 -0
  25. data/ext/libmspack/libmscabd.la +41 -0
  26. data/ext/libmspack/libmschmd.la +41 -0
  27. data/ext/libmspack/libmspack.la +41 -0
  28. data/ext/libmspack/ltmain.sh +11156 -0
  29. data/ext/libmspack/m4/libtool.m4 +8387 -0
  30. data/ext/libmspack/m4/ltoptions.m4 +437 -0
  31. data/ext/libmspack/m4/ltsugar.m4 +124 -0
  32. data/ext/libmspack/m4/ltversion.m4 +23 -0
  33. data/ext/libmspack/m4/lt~obsolete.m4 +99 -0
  34. data/ext/libmspack/missing +215 -0
  35. data/ext/libmspack/mspack/cab.h +20 -7
  36. data/ext/libmspack/mspack/cabd.c +301 -236
  37. data/ext/libmspack/mspack/chmd.c +304 -319
  38. data/ext/libmspack/mspack/crc32.c +52 -52
  39. data/ext/libmspack/mspack/crc32.h +1 -1
  40. data/ext/libmspack/mspack/kwajd.c +178 -172
  41. data/ext/libmspack/mspack/lzss.h +4 -4
  42. data/ext/libmspack/mspack/lzssd.c +42 -42
  43. data/ext/libmspack/mspack/lzx.h +11 -11
  44. data/ext/libmspack/mspack/lzxd.c +370 -361
  45. data/ext/libmspack/mspack/mspack.h +109 -77
  46. data/ext/libmspack/mspack/mszip.h +6 -6
  47. data/ext/libmspack/mspack/mszipd.c +140 -139
  48. data/ext/libmspack/mspack/oab.h +1 -0
  49. data/ext/libmspack/mspack/oabd.c +71 -73
  50. data/ext/libmspack/mspack/qtm.h +4 -4
  51. data/ext/libmspack/mspack/qtmd.c +118 -117
  52. data/ext/libmspack/mspack/readbits.h +52 -52
  53. data/ext/libmspack/mspack/readhuff.h +61 -61
  54. data/ext/libmspack/mspack/system.c +15 -9
  55. data/ext/libmspack/mspack/system.h +38 -50
  56. data/ext/libmspack/mspack/szddd.c +35 -35
  57. data/ext/libmspack/test-driver +148 -0
  58. data/ext/x86_64-linux/libmspack.so +0 -0
  59. data/ext/x86_64-windows/mspack.dll +0 -0
  60. data/lib/libmspack/version.rb +2 -1
  61. data/lib/libmspack.rb +1 -1
  62. data/libmspack.gemspec +4 -4
  63. data/spec/libmspack_spec.rb +5 -4
  64. metadata +38 -105
  65. data/.travis.yml +0 -5
  66. data/ext/i386-windows/libmspack.dll +0 -0
  67. data/ext/libmspack/cleanup.sh +0 -9
  68. data/ext/libmspack/debian/changelog +0 -6
  69. data/ext/libmspack/debian/control +0 -14
  70. data/ext/libmspack/debian/rules +0 -101
  71. data/ext/libmspack/doc/Doxyfile.in +0 -22
  72. data/ext/libmspack/doc/Makefile.in +0 -14
  73. data/ext/libmspack/doc/szdd_kwaj_format.html +0 -331
  74. data/ext/libmspack/mspack/mspack.def +0 -28
  75. data/ext/libmspack/mspack/qtmc.c +0 -18
  76. data/ext/libmspack/rebuild.sh +0 -8
  77. data/ext/libmspack/test/cabd_c10 +0 -19
  78. data/ext/libmspack/test/cabd_compare +0 -34
  79. data/ext/libmspack/test/cabd_md5.c +0 -161
  80. data/ext/libmspack/test/cabd_memory.c +0 -179
  81. data/ext/libmspack/test/cabd_test.c +0 -386
  82. data/ext/libmspack/test/cabrip.c +0 -81
  83. data/ext/libmspack/test/chmd_compare +0 -38
  84. data/ext/libmspack/test/chmd_find.c +0 -95
  85. data/ext/libmspack/test/chmd_md5.c +0 -67
  86. data/ext/libmspack/test/chmd_order.c +0 -144
  87. data/ext/libmspack/test/chminfo.c +0 -284
  88. data/ext/libmspack/test/chmx.c +0 -216
  89. data/ext/libmspack/test/error.h +0 -22
  90. data/ext/libmspack/test/expand.c +0 -79
  91. data/ext/libmspack/test/md5.c +0 -457
  92. data/ext/libmspack/test/md5.h +0 -165
  93. data/ext/libmspack/test/md5_fh.h +0 -123
  94. data/ext/libmspack/test/msdecompile_md5 +0 -24
  95. data/ext/libmspack/test/msexpand_md5 +0 -39
  96. data/ext/libmspack/test/multifh.c +0 -435
  97. data/ext/libmspack/test/oabx.c +0 -41
  98. data/ext/libmspack/test/test_files/cabd/1.pl +0 -84
  99. data/ext/libmspack/test/test_files/cabd/2.pl +0 -75
  100. data/ext/libmspack/test/test_files/cabd/bad_folderindex.cab +0 -0
  101. data/ext/libmspack/test/test_files/cabd/bad_nofiles.cab +0 -0
  102. data/ext/libmspack/test/test_files/cabd/bad_nofolders.cab +0 -0
  103. data/ext/libmspack/test/test_files/cabd/bad_signature.cab +0 -0
  104. data/ext/libmspack/test/test_files/cabd/multi_basic_pt1.cab +0 -0
  105. data/ext/libmspack/test/test_files/cabd/multi_basic_pt2.cab +0 -0
  106. data/ext/libmspack/test/test_files/cabd/multi_basic_pt3.cab +0 -0
  107. data/ext/libmspack/test/test_files/cabd/multi_basic_pt4.cab +0 -0
  108. data/ext/libmspack/test/test_files/cabd/multi_basic_pt5.cab +0 -0
  109. data/ext/libmspack/test/test_files/cabd/normal_255c_filename.cab +0 -0
  110. data/ext/libmspack/test/test_files/cabd/normal_2files_1folder.cab +0 -0
  111. data/ext/libmspack/test/test_files/cabd/partial_nodata.cab +0 -0
  112. data/ext/libmspack/test/test_files/cabd/partial_nofiles.cab +0 -0
  113. data/ext/libmspack/test/test_files/cabd/partial_nofolder.cab +0 -0
  114. data/ext/libmspack/test/test_files/cabd/partial_shortextheader.cab +0 -0
  115. data/ext/libmspack/test/test_files/cabd/partial_shortfile1.cab +0 -0
  116. data/ext/libmspack/test/test_files/cabd/partial_shortfile2.cab +0 -0
  117. data/ext/libmspack/test/test_files/cabd/partial_shortfolder.cab +0 -0
  118. data/ext/libmspack/test/test_files/cabd/partial_shortheader.cab +0 -0
  119. data/ext/libmspack/test/test_files/cabd/partial_str_nofname.cab +0 -0
  120. data/ext/libmspack/test/test_files/cabd/partial_str_noninfo.cab +0 -0
  121. data/ext/libmspack/test/test_files/cabd/partial_str_nonname.cab +0 -0
  122. data/ext/libmspack/test/test_files/cabd/partial_str_nopinfo.cab +0 -0
  123. data/ext/libmspack/test/test_files/cabd/partial_str_nopname.cab +0 -0
  124. data/ext/libmspack/test/test_files/cabd/partial_str_shortfname.cab +0 -0
  125. data/ext/libmspack/test/test_files/cabd/partial_str_shortninfo.cab +0 -0
  126. data/ext/libmspack/test/test_files/cabd/partial_str_shortnname.cab +0 -0
  127. data/ext/libmspack/test/test_files/cabd/partial_str_shortpinfo.cab +0 -0
  128. data/ext/libmspack/test/test_files/cabd/partial_str_shortpname.cab +0 -0
  129. data/ext/libmspack/test/test_files/cabd/reserve_---.cab +0 -0
  130. data/ext/libmspack/test/test_files/cabd/reserve_--D.cab +0 -0
  131. data/ext/libmspack/test/test_files/cabd/reserve_-F-.cab +0 -0
  132. data/ext/libmspack/test/test_files/cabd/reserve_-FD.cab +0 -0
  133. data/ext/libmspack/test/test_files/cabd/reserve_H--.cab +0 -0
  134. data/ext/libmspack/test/test_files/cabd/reserve_H-D.cab +0 -0
  135. data/ext/libmspack/test/test_files/cabd/reserve_HF-.cab +0 -0
  136. data/ext/libmspack/test/test_files/cabd/reserve_HFD.cab +0 -0
  137. data/ext/libmspack/test/test_files/cabd/search_basic.cab +0 -0
  138. data/ext/libmspack/test/test_files/cabd/search_tricky1.cab +0 -0
  139. data/ext/libmspack/winbuild.sh +0 -26
  140. data/ext/libmspack.h +0 -259
  141. data/ext/x86_64-windows/libmspack.dll +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9c2006f7e3851c3958175cf7db8a47f31b11d013
4
- data.tar.gz: 9f6670e7977d93010b2aefa24d0b6946c77a0ff2
2
+ SHA256:
3
+ metadata.gz: 4f7e699b916ed25c7cf27af04f178bdb8c84c97653da53630ab74198cb6a5b25
4
+ data.tar.gz: 896ec19d91ba13283097e97dfbec351072ffabe59ffda376574da3d41771317c
5
5
  SHA512:
6
- metadata.gz: 7b25e651a134cde4efa33846afcd373a0bd3acf77fd43737852860dd390ce2512669d795cfcede7c05953f16865472fb5b2fc3f6d9aff3416c51ba62365e0442
7
- data.tar.gz: 084fdf58252c604bddadec06af9d22e1dd2a7644e6b5bd10bfd324764e7f1b93786cb5b03c905494587c0637b321e1c484bd0858fefc8aeee74fd0b441f7dc68
6
+ metadata.gz: c5b5a056b334424b50b842b353fec045147f7aecc9ac30140f309b64e875b72bdcba990e3f65659f7d8c1f0f0becdc7ecb2769752d1532c111fd8d2a4eb9c7c8
7
+ data.tar.gz: 28bd80c859cc9aeb19656b7ee1411724446d45286b7ca74752ea893fd7bf42e20f6522280da79c7f453c063448d3c1b49a92af4baa333382fe766172d67a69c8
@@ -0,0 +1,37 @@
1
+ name: rake
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ tags: [ v* ]
7
+ pull_request:
8
+
9
+ jobs:
10
+ rake:
11
+ name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
12
+ runs-on: ${{ matrix.os }}
13
+ continue-on-error: ${{ matrix.experimental }}
14
+ strategy:
15
+ fail-fast: false
16
+ matrix:
17
+ ruby: [ '3.1', '3.0', '2.7', '2.6', '2.5' ]
18
+ os: [ ubuntu-latest, macos-latest ] #, windows-latest
19
+ experimental: [ false ]
20
+ steps:
21
+ - uses: actions/checkout@v2
22
+ with:
23
+ submodules: true
24
+
25
+ - uses: ruby/setup-ruby@v1
26
+ with:
27
+ ruby-version: ${{ matrix.ruby }}
28
+ bundler-cache: true
29
+
30
+ - name: Download libmspack source
31
+ run: bundle exec rake libmspack
32
+
33
+ - name: Compile libmspack
34
+ run: bundle exec rake compile
35
+
36
+ - name: Run specs
37
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -16,3 +16,5 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  /ext/*/
19
+ /checksums
20
+
data/.yardopts CHANGED
@@ -1 +1 @@
1
- --markup markdown
1
+ --markup markdown
data/README.md CHANGED
@@ -24,7 +24,7 @@ Or install it yourself as:
24
24
  gems:
25
25
 
26
26
  * `ffi` (required)
27
- * `ffi-compiler` (required for compiling libmspack)
27
+ * `ffi-compiler2` (required for compiling libmspack)
28
28
 
29
29
  ## Usage
30
30
 
data/Rakefile CHANGED
@@ -14,11 +14,17 @@ end
14
14
 
15
15
  desc 'Download libmspack source code'
16
16
  task :libmspack do
17
- require 'svn/downloader'
18
- repo = 'http://svn.code.sf.net/p/libmspack/code/libmspack/trunk/'
19
- path = './ext/libmspack/'
20
- SVN::Downloader.download(repo, path)
21
- File.delete(path + 'mspack/debug.c')
17
+ require 'open-uri'
18
+ version = '0.10.1alpha'
19
+ source = "https://www.cabextract.org.uk/libmspack/libmspack-#{version}.tar.gz"
20
+ target = './ext/'
21
+ archivedir = 'libmspack-' + version
22
+ URI(source).open do |tempfile|
23
+ system('tar', '-C', target, '-xf', tempfile.path)
24
+ end
25
+ FileUtils.rm_rf(target + 'libmspack')
26
+ FileUtils.mv(target + archivedir, target + 'libmspack')
27
+ FileUtils.rm_rf(target + archivedir)
22
28
  end
23
29
 
24
30
  desc 'Compile libmspack source code'
data/ext/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'ffi-compiler/compile_task'
2
2
 
3
- FFI::Compiler::CompileTask.new('libmspack') do |compiler|
3
+ FFI::Compiler::CompileTask.new('mspack') do |compiler|
4
4
  compiler.source_dirs = ['./libmspack/mspack/']
5
5
  compiler.add_include_path(compiler.source_dirs.last)
6
6
  compiler.add_define('_FILE_OFFSET_BITS', 64) # off_t must be 64-bit
@@ -10,3 +10,4 @@ Contributors:
10
10
  - LZX decompressor fixes by Jae Jung and Igor Glucksmann
11
11
  - Debianisation by Markus Sinner
12
12
  - Quantum decompressor fix by Larry Frieson
13
+ - OAB decompressor by David Woodhouse
@@ -1,3 +1,320 @@
1
+ 2019-02-18 Stuart Caie <kyzer@cabextract.org.uk>
2
+
3
+ * chmd_read_headers(): a CHM file name beginning "::" but shorter
4
+ than 33 bytes will lead to reading past the freshly-allocated name
5
+ buffer - checks for specific control filenames didn't take length
6
+ into account. Thanks to ADLab of Venustech for the report and
7
+ proof of concept.
8
+
9
+ 2019-02-18 Stuart Caie <kyzer@cabextract.org.uk>
10
+
11
+ * chmd_read_headers(): CHM files can declare their chunks are any
12
+ size up to 4GB, and libmspack will attempt to allocate that to
13
+ read the file.
14
+
15
+ This is not a security issue; libmspack doesn't promise how much
16
+ memory it'll use to unpack files. You can set your own limits by
17
+ returning NULL in a custom mspack_system.alloc() implementation.
18
+
19
+ However, it would be good to validate chunk size further. With no
20
+ offical specification, only empirical data is available. All files
21
+ created by hhc.exe have a chunk size of 4096 bytes, and this is
22
+ matched by all the files I've found in the wild, except for one
23
+ which has a chunk size of 8192 bytes, which was created by someone
24
+ developing a CHM file creator 15 years ago, and they appear to
25
+ have abandoned it, so it seems 4096 is a de-facto standard.
26
+
27
+ I've changed the "chunk size is not a power of two" warning to
28
+ "chunk size is not 4096", and now only allow chunk sizes between
29
+ 22 and 8192 bytes. If you have CHM files with a larger chunk size,
30
+ please send them to me and I'll increase this upper limit.
31
+
32
+ Thanks to ADLab of Venustech for the report.
33
+
34
+ 2019-02-18 Stuart Caie <kyzer@cabextract.org.uk>
35
+
36
+ * oabd.c: replaced one-shot copying of uncompressed blocks (which
37
+ requires allocating a buffer of the size declared in the header,
38
+ which can be 4GB) with a fixed-size buffer. The buffer size is
39
+ user-controllable with the new msoab_decompressor::set_param()
40
+ method (check you have version 2 of the OAB decompressor), and
41
+ also controls the input buffer used for OAB's LZX decompression.
42
+
43
+ Reminder: compression formats can dictate how much memory is
44
+ needed to decompress them. If memory usage is a security concern
45
+ to you, write a custom mspack_system.alloc() that returns NULL
46
+ if "too much" memory is requested. Do not rely on libmspack adding
47
+ special heuristics to know not to request "too much".
48
+
49
+ Thanks to ADLab of Venustech for the report.
50
+
51
+ 2018-11-03 Stuart Caie <kyzer@cabextract.org.uk>
52
+
53
+ * configure.ac, doc/Makefile.in, doc/Doxyfile.in: remove these
54
+ template files and replace with static files. You can still build
55
+ the documentation with make -C doc
56
+
57
+ 2018-11-03 Stuart Caie <kyzer@cabextract.org.uk>
58
+
59
+ * Makefile.am, src: move the "useful" programs in src/ to examples/
60
+ and don't auto-install them. Even though they're useful, they are
61
+ intended as examples and aren't productised (no commmand-line
62
+ options, no man pages, etc.) -- if you disagree, feel free to
63
+ send in a patch
64
+
65
+ 2018-11-01 Stuart Caie <kyzer@cabextract.org.uk>
66
+
67
+ * cabd_extract(): would not do decompression for random-access
68
+ offsets if the folder type was LZX. This is a fairly major bug,
69
+ and affects any decompression where you skip directly to a file,
70
+ or decompress data out-of-order. Thanks to austin987 for alerting
71
+ me to this.
72
+
73
+ This bug was introduced by the recent 'salvage mode' patch. Even
74
+ though I'd reviewed all the differences in clamav's copy of
75
+ libmspack and said "wtf" to this particular change, I didn't
76
+ notice it was still in the resulting patch I merged. Mea culpa :)
77
+
78
+ * test/cabd_test.c: now has a regression test to cover this
79
+
80
+ 2018-10-31 Stuart Caie <kyzer@cabextract.org.uk>
81
+
82
+ * Makefile.am, test/*_test.c: use the automake test-suite system
83
+ with the test-suite programs (cabd_test, chmd_test, kwajd_test).
84
+ This also fixes a longstanding bugbear that these programs don't
85
+ access their test files using an absolute path. Now this is passed
86
+ to them and you can run them from any directory. Thanks to Richard
87
+ Jones for requesting this.
88
+
89
+ 2018-10-31 Stuart Caie <kyzer@cabextract.org.uk>
90
+
91
+ * configure.ac: require at least automake 1.11, use AM_SILENT_RULES
92
+ unconditionally
93
+
94
+ 2018-10-30 Stuart Caie <kyzer@cabextract.org.uk>
95
+
96
+ * configure.ac: remove obsolescent C library tests. AC_HEADER_STDC is
97
+ removed, and so are most checks for standard C headers. libmspack now
98
+ makes these assumptions:
99
+ - <ctype.h> <limits.h> <stdlib.h> <string.h> exist
100
+ - <ctype.h> defines tolower()
101
+ - <string.h> defines memset(), memcmp(), strlen()
102
+ - if towlower() exists, it's defined in <wctype.h>
103
+
104
+ 2018-10-22 Stuart Caie <kyzer@cabextract.org.uk>
105
+
106
+ * cabd.c: remove the only use of assert()
107
+
108
+ 2018-10-20 Stuart Caie <kyzer@cabextract.org.uk>
109
+
110
+ * src/chmextract.c: add anti "../" and leading slash protection to
111
+ chmextract. I'm not pleased about this. All the sample code provided
112
+ with libmspack is meant to be simple examples of library use, not
113
+ "productised" binaries. Making the "useful" code samples install
114
+ as binaries was a mistake. They were never intended to protect you
115
+ from unpacking archive files with relative/absolute paths, and I
116
+ would prefer that they never will be.
117
+
118
+ 2018-10-17 Stuart Caie <kyzer@cabextract.org.uk>
119
+
120
+ * cab.h: Make the CAB block input buffer one byte larger, to allow
121
+ a maximum-allowed-size input block and the special extra byte added
122
+ after the block by cabd_sys_read_block to help Quantum alignment.
123
+ Thanks to Henri Salo for reporting this.
124
+
125
+ 2018-10-17 Stuart Caie <kyzer@cabextract.org.uk>
126
+
127
+ * chmd_read_headers(): again reject files with blank filenames, this
128
+ time because their 1st or 2nd byte is null, not because their length
129
+ is zero. Thanks again to Hanno Böck for finding the issue.
130
+
131
+ 2018-10-16 Stuart Caie <kyzer@cabextract.org.uk>
132
+
133
+ * Makefile.am: using automake _DEPENDENCIES for chmd_test appears to
134
+ override the default dependencies (e.g. sources), so libchmd.la was no
135
+ longer considered a dependency of chmd_test. This breaks parallel
136
+ builds like "make -j4". Added libchmd.la explicitly to dependencies.
137
+ Thanks to Thomas Deutschmann for reporting this.
138
+
139
+ 2018-10-16 Stuart Caie <kyzer@cabextract.org.uk>
140
+
141
+ * cabd.c: add new parameter, MSCABD_PARAM_SALVAGE, which makes CAB file
142
+ reading and extraction more lenient, to allow damaged or mangled CABs
143
+ to be extracted. When enabled:
144
+ - cabd->open() won't reject cabinets with files that have invalid
145
+ folder indices or filenames. These files will simply be skipped
146
+ - cabd->extract() won't reject files with invalid lengths, but will
147
+ limit them to the maximum possible
148
+ - block output sizes over 32768 bytes won't be rejected
149
+ - invalid data block checksums won't be rejected
150
+
151
+ It's still possible for corrupted files to fail extraction, but more
152
+ data can be extracted before they do.
153
+
154
+ This new parameter doesn't affect the existing MSCABD_PARAM_FIXMSZIP
155
+ parameter, which ignores MSZIP decompression failures. You can enable
156
+ both at once.
157
+
158
+ Thanks to Micah Snyder from ClamAV for working with me to get this
159
+ feature into libmspack. This also helps ClamAV move towards using a
160
+ vanilla copy of libmspack without needing their own patchset.
161
+
162
+ 2018-08-13 Stuart Caie <kyzer@cabextract.org.uk>
163
+
164
+ * mspack.h: clarify that mspack_system.free() should allow NULL. If your
165
+ mspack_system implementation doesn't, it would already have crashed, as
166
+ there are several places where libmspack calls sys->free(NULL). This
167
+ change makes it official, and amends a few "if (x) sys->free(x)" cases
168
+ to the simpler "sys->free(x)" to make it clearer.
169
+
170
+ 2018-08-09 Stuart Caie <kyzer@cabextract.org.uk>
171
+
172
+ * Makefile.am: the test file cve-2015-4467-reset-interval-zero.chm is
173
+ detected by ClamAV as BC.Legacy.Exploit.CVE_2012_1458-1 "infected".
174
+ My hosting deletes anything that ClamAV calls "infected", so has been
175
+ continually deleting the official libmspack 0.7alpha release.
176
+
177
+ CVE-2012-1458 is the same issue as CVE-2015-4467: both libmspack, and
178
+ ClamAV using libmspack, could get a division-by-zero crash when the LZX
179
+ reset interval was zero. This was fixed years ago, but ClamAV still has
180
+ it as a signature, which today prevents me from releasing libmspack.
181
+
182
+ BC.Legacy.Exploit.CVE_2012_1458-1 is a bytecode signature, so I can't
183
+ see the exact trigger conditions, but I can see that it looks for the
184
+ "LZXC" signature of the LZX control file, so I've changed this to
185
+ "lzxc" and added a step in the Makefile to change it back to LZXC, so
186
+ I can release libmspack whether or not ClamAV keeps the signature.
187
+
188
+ 2018-04-26 Stuart Caie <kyzer@cabextract.org.uk>
189
+
190
+ * read_chunk(): the test that chunk numbers are in bounds was off
191
+ by one, so read_chunk() returned a pointer taken from outside
192
+ allocated memory that usually crashes libmspack when accessed.
193
+ Thanks to Hanno Böck for finding the issue and providing a sample.
194
+
195
+ * chmd_read_headers(): reject files with blank filenames. Thanks
196
+ again to Hanno Böck for finding the issue and providing a sample file.
197
+
198
+ 2018-02-06 Stuart Caie <kyzer@cabextract.org.uk>
199
+
200
+ * chmd.c: fixed an off-by-one error in the TOLOWER() macro, reported
201
+ by Dmitry Glavatskikh. Thanks Dmitry!
202
+
203
+ 2017-11-26 Stuart Caie <kyzer@cabextract.org.uk>
204
+
205
+ * kwajd_read_headers(): fix up the logic of reading the filename and
206
+ extension headers to avoid a one or two byte overwrite. Thanks to
207
+ Jakub Wilk for finding the issue.
208
+
209
+ * test/kwajd_test.c: add tests for KWAJ filename.ext handling
210
+
211
+ 2017-10-16 Stuart Caie <kyzer@cabextract.org.uk>
212
+
213
+ * test/cabd_test.c: update the short string tests to expect not only
214
+ MSPACK_ERR_DATAFORMAT but also MSPACK_ERR_READ, because of the recent
215
+ change to cabd_read_string(). Thanks to maitreyee43 for spotting this.
216
+
217
+ * test/msdecompile_md5: update the setup instructions for this script,
218
+ and also change the script so it works with current Wine. Again, thanks
219
+ to maitreyee43 for trying to use it and finding it not working.
220
+
221
+ 2017-08-13 Stuart Caie <kyzer@cabextract.org.uk>
222
+
223
+ * src/chmextract.c: support MinGW one-arg mkdir(). Thanks to AntumDeluge
224
+ for reporting this.
225
+
226
+ 2017-08-13 Stuart Caie <kyzer@cabextract.org.uk>
227
+
228
+ * read_spaninfo(): a CHM file can have no ResetTable and have a
229
+ negative length in SpanInfo, which then feeds a negative output length
230
+ to lzxd_init(), which then sets frame_size to a value of your choosing,
231
+ the lower 32 bits of output length, larger than LZX_FRAME_SIZE. If the
232
+ first LZX block is uncompressed, this writes data beyond the end of the
233
+ window. This issue was raised by ClamAV as CVE-2017-6419. Thanks to
234
+ Sebastian Andrzej Siewior for finding this by chance!
235
+
236
+ * lzxd_init(), lzxd_set_output_length(), mszipd_init(): due to the issue
237
+ mentioned above, these functions now reject negative lengths
238
+
239
+ 2017-08-05 Stuart Caie <kyzer@cabextract.org.uk>
240
+
241
+ * cabd_read_string(): add missing error check on result of read().
242
+ If an mspack_system implementation returns an error, it's interpreted
243
+ as a huge positive integer, which leads to reading past the end of the
244
+ stack-based buffer. Thanks to Sebastian Andrzej Siewior for explaining
245
+ the problem. This issue was raised by ClamAV as CVE-2017-11423
246
+
247
+ 2016-04-20 Stuart Caie <kyzer@cabextract.org.uk>
248
+
249
+ * configure.ac: change my email address to kyzer@cabextract.org.uk
250
+
251
+ 2015-05-10 Stuart Caie <kyzer@4u.net>
252
+
253
+ * cabd_read_string(): correct rejection of empty strings. Thanks to
254
+ Hanno Böck for finding the issue and providing a sample file.
255
+
256
+ 2015-05-10 Stuart Caie <kyzer@4u.net>
257
+
258
+ * Makefile.am: Add subdir-objects option as suggested by autoreconf.
259
+
260
+ * configure.ac: Add AM_PROG_AR as suggested by autoreconf.
261
+
262
+ 2015-01-29 Stuart Caie <kyzer@4u.net>
263
+
264
+ * system.h: if C99 inttypes.h exists, use its PRI{d,u}{32,64} macros.
265
+ Thanks to Johnathan Kollasch for the suggestion.
266
+
267
+ 2015-01-18 Stuart Caie <kyzer@4u.net>
268
+
269
+ * lzxd_decompress(): the byte-alignment code for reading uncompressed
270
+ block headers presumed it could wind i_ptr back 2 bytes, but this
271
+ hasn't been true since READ_BYTES was allowed to read bytes straddling
272
+ two blocks, leaving just 1 byte in the read buffer. Thanks to Jakub
273
+ Wilk for finding the issue and providing a sample file.
274
+
275
+ * inflate(): off-by-one error. Distance codes are 0-29, not 0-30.
276
+ Thanks to Jakub Wilk again.
277
+
278
+ * chmd_read_headers(), search_chunk(): another fix for checking pointer
279
+ is within a chunk, thanks again to Jakub Wilk.
280
+
281
+ 2015-01-17 Stuart Caie <kyzer@4u.net>
282
+
283
+ * GET_UTF8_CHAR(): Remove 5/6-byte encoding support and check decoded
284
+ chars are no more than U+10FFFF.
285
+
286
+ * chmd_init_decomp(): A reset interval of 0 is invalid. Thanks to
287
+ Jakub Wilk for finding the issue and providing a sample and patch.
288
+
289
+ 2015-01-15 Stuart Caie <kyzer@4u.net>
290
+
291
+ * chmd_read_headers(): add a bounds check to prevent over-reading data,
292
+ which caused a segfault on 32-bit architectures. Thanks to Jakub Wilk.
293
+
294
+ * search_chunk(): change the order of pointer arithmetic operations to
295
+ avoid overflow during bounds checks, which lead to segfaults on 32-bit
296
+ architectures. Again, thanks to Jakub Wilk for finding this issue,
297
+ providing sample files and a patch.
298
+
299
+ 2015-01-08 Stuart Caie <kyzer@4u.net>
300
+
301
+ * cabd_extract(): No longer uses broken state data if extracting from
302
+ folder 1, 2, 1 and setting up folder 2 fails. This prevents a jump to
303
+ null and thus segfault. Thanks to Jakub Wilk again.
304
+
305
+ * cabd_read_string: reject empty strings. They are not found in any
306
+ valid CAB files. Thanks to Hanno Böck for sending me an example.
307
+
308
+ 2015-01-05 Stuart Caie <kyzer@4u.net>
309
+
310
+ * cabd_can_merge_folders(): disallow folder merging if the combined
311
+ folder would have more than 65535 data blocks.
312
+
313
+ * cabd_decompress(): disallow files if their offset, length or
314
+ offset+length is more than 65535*32768, the maximum size of any
315
+ folder. Thanks to Jakub Wilk for identifying the problem and providing
316
+ a sample file.
317
+
1
318
  2014-04-20 Stuart Caie <kyzer@4u.net>
2
319
 
3
320
  * readhuff.h: fixed the table overflow check, which allowed one more
@@ -41,9 +358,9 @@
41
358
 
42
359
  2011-11-23 Stuart Caie <kyzer@4u.net>
43
360
 
44
- * chmd_fast_find(): add a simple check against infinite PGML
361
+ * chmd_fast_find(): add a simple check against infinite PMGL
45
362
  loops. Thanks to Sergei Trofimovich for finding sample files.
46
- Multi-step PGML or PGMI infinite loops remain possible.
363
+ Multi-step PMGL/PMGI infinite loops remain possible.
47
364
 
48
365
  2011-06-17 Stuart Caie <kyzer@4u.net>
49
366
 
@@ -162,7 +479,7 @@
162
479
  2011-04-26: Stuart Caie <kyzer@4u.net>
163
480
 
164
481
  * test/chminfo.c: more sanity checks for corrupted CHM files where
165
- entries go past the end of a PGML/PGMI chunk, thanks to
482
+ entries go past the end of a PMGL/PMGI chunk, thanks to
166
483
  Sergei Trofimovich for sending me examples and analysis.
167
484
 
168
485
  2011-04-25: Stuart Caie <kyzer@4u.net>
@@ -408,7 +725,7 @@
408
725
  2005-03-22: Stuart Caie <kyzer@4u.net>
409
726
 
410
727
  * system.h: now undefs "read", as the latest glibc defines read()
411
- as a macro which messes everything up. Thanks to Ville Skytt� for
728
+ as a macro which messes everything up. Thanks to Ville Skyttä for
412
729
  the update.
413
730
 
414
731
  2005-03-14: Stuart Caie <kyzer@4u.net>