VYPR
Unrated severityNVD Advisory· Published Jul 28, 2018· Updated Aug 5, 2024

CVE-2018-14679

CVE-2018-14679

Description

An issue was discovered in mspack/chmd.c in libmspack before 0.7alpha. There is an off-by-one error in the CHM PMGI/PMGL chunk number validity checks, which could lead to denial of service (uninitialized data dereference and application crash).

Affected products

50

Patches

1
72e70a921f0f

Fix off-by-one bounds check on CHM PMGI/PMGL chunk numbers and

https://github.com/kyz/libmspackStuart CaieMay 12, 2018via osv
2 files changed · +16 3
  • libmspack/ChangeLog+10 0 modified
    @@ -1,3 +1,13 @@
    +2018-04-26  Stuart Caie <[email protected]>
    +
    +	* read_chunk(): the test that chunk numbers are in bounds was off
    +	by one, so read_chunk() returned a pointer taken from outside
    +	allocated memory that usually crashes libmspack when accessed.
    +	Thanks to Hanno Böck for finding the issue and providing a sample.
    +
    +	* chmd_read_headers(): reject files with blank filenames. Thanks
    +	again to Hanno Böck for finding the issue and providing a sample file.
    +
     2018-02-06  Stuart Caie <[email protected]>
     
     	* chmd.c: fixed an off-by-one error in the TOLOWER() macro, reported
    
  • libmspack/mspack/chmd.c+6 3 modified
    @@ -1,5 +1,5 @@
     /* This file is part of libmspack.
    - * (C) 2003-2011 Stuart Caie.
    + * (C) 2003-2018 Stuart Caie.
      *
      * libmspack is free software; you can redistribute it and/or modify it under
      * the terms of the GNU Lesser General Public License (LGPL) version 2.1
    @@ -397,7 +397,7 @@ static int chmd_read_headers(struct mspack_system *sys, struct mspack_file *fh,
         D(("first pmgl chunk is after last pmgl chunk"))
         return MSPACK_ERR_DATAFORMAT;
       }
    -  if (chm->index_root != 0xFFFFFFFF && chm->index_root > chm->num_chunks) {
    +  if (chm->index_root != 0xFFFFFFFF && chm->index_root >= chm->num_chunks) {
         D(("index_root outside valid range"))
         return MSPACK_ERR_DATAFORMAT;
       }
    @@ -447,7 +447,10 @@ static int chmd_read_headers(struct mspack_system *sys, struct mspack_file *fh,
         while (num_entries--) {
           READ_ENCINT(name_len);
           if (name_len > (unsigned int) (end - p)) goto chunk_end;
    +      /* consider blank filenames to be an error */
    +      if (name_len == 0) goto chunk_end;
           name = p; p += name_len;
    +
           READ_ENCINT(section);
           READ_ENCINT(offset);
           READ_ENCINT(length);
    @@ -622,7 +625,7 @@ static unsigned char *read_chunk(struct mschm_decompressor_p *self,
         unsigned char *buf;
     
         /* check arguments - most are already checked by chmd_fast_find */
    -    if (chunk_num > chm->num_chunks) return NULL;
    +    if (chunk_num >= chm->num_chunks) return NULL;
         
         /* ensure chunk cache is available */
         if (!chm->chunk_cache) {
    

Vulnerability mechanics

Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

13

News mentions

0

No linked articles in our index yet.