<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://www.msweet.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.msweet.org/" rel="alternate" type="text/html" /><updated>2026-08-10T17:22:18+00:00</updated><id>https://www.msweet.org/feed.xml</id><title type="html">Michael R Sweet</title><subtitle>Michael R Sweet&apos;s User Page Repository</subtitle><entry><title type="html">Mike’s System Monitor (msysmon) v1.0.0</title><link href="https://www.msweet.org/blog/2026-08-10-msysmon-1.0.0.html" rel="alternate" type="text/html" title="Mike’s System Monitor (msysmon) v1.0.0" /><published>2026-08-10T00:00:00+00:00</published><updated>2026-08-10T00:00:00+00:00</updated><id>https://www.msweet.org/blog/msysmon-1.0.0</id><content type="html" xml:base="https://www.msweet.org/blog/2026-08-10-msysmon-1.0.0.html"><![CDATA[<p>Mike’s System Monitor (msysmon) is a lightweight administrator/developer tool
for monitoring the CPU, memory, and threads used by processes on a Linux or
macOS system.  I wrote it primarily to do long-term testing of embedded Linux
systems where memory leaks, crashes, and/or CPU spins can cause problems but
are often hard to track down.</p>

<p><code class="language-plaintext highlighter-rouge">msysmon</code> runs in the background to collect usage information and provides a
simple web interface for viewing it complete with graphs.</p>

<p>Enjoy!</p>

<p><a class="btn btn-primary" href="https://github.com/michaelrsweet/msysmon/releases/tag/v1.0.0">Download msysmon 1.0.0</a>
<a class="btn btn-default" href="/msysmon/index.html">Home Page</a></p>]]></content><author><name></name></author><category term="msysmon" /><summary type="html"><![CDATA[Mike’s System Monitor (msysmon) is a lightweight administrator/developer tool for monitoring the CPU, memory, and threads used by processes on a Linux or macOS system. I wrote it primarily to do long-term testing of embedded Linux systems where memory leaks, crashes, and/or CPU spins can cause problems but are often hard to track down. msysmon runs in the background to collect usage information and provides a simple web interface for viewing it complete with graphs. Enjoy! Download msysmon 1.0.0 Home Page]]></summary></entry><entry><title type="html">HP Printer Application v1.3.1</title><link href="https://www.msweet.org/blog/2026-06-08-hp-printer-app-1.3.1.html" rel="alternate" type="text/html" title="HP Printer Application v1.3.1" /><published>2026-06-08T00:00:00+00:00</published><updated>2026-06-08T00:00:00+00:00</updated><id>https://www.msweet.org/blog/hp-printer-app-1.3.1</id><content type="html" xml:base="https://www.msweet.org/blog/2026-06-08-hp-printer-app-1.3.1.html"><![CDATA[<p>HP Printer Application v1.3.1 is a bug fix release.  Changes include:</p>

<ul>
  <li>Improved PCL compression code.</li>
  <li>Fixed CMYK output.</li>
  <li>Fixed a few PCL 6 output bugs.</li>
  <li>Fixed the <code class="language-plaintext highlighter-rouge">--enable-experimental</code> configure option to enable the PCL 6 driver.</li>
</ul>

<p>Enjoy!</p>

<p><a class="btn btn-primary" href="https://github.com/michaelrsweet/hp-printer-app/releases/tag/v1.3.1">Download PAPPL v1.3.1</a>
<a class="btn btn-default" href="/hp-printer-app/index.html">Home Page</a></p>]]></content><author><name></name></author><category term="hp-printer-app" /><summary type="html"><![CDATA[HP Printer Application v1.3.1 is a bug fix release. Changes include: Improved PCL compression code. Fixed CMYK output. Fixed a few PCL 6 output bugs. Fixed the --enable-experimental configure option to enable the PCL 6 driver. Enjoy! Download PAPPL v1.3.1 Home Page]]></summary></entry><entry><title type="html">LPrint v1.4.0</title><link href="https://www.msweet.org/blog/2026-06-08-lprint-1.4.0.html" rel="alternate" type="text/html" title="LPrint v1.4.0" /><published>2026-06-08T00:00:00+00:00</published><updated>2026-06-08T00:00:00+00:00</updated><id>https://www.msweet.org/blog/lprint-1.4.0</id><content type="html" xml:base="https://www.msweet.org/blog/2026-06-08-lprint-1.4.0.html"><![CDATA[<p>LPrint v1.4.0 is a feature release that adds support for ESC/POS printers and
several other printer models with existing drivers.  Changes include:</p>

<ul>
  <li>Added ESC/POS driver (Issue #123)</li>
  <li>Added Vevor Y428BT driver (Issue #130)</li>
  <li>Added 4 x 7.83 inch label size (Issue #144)</li>
  <li>Added Arkscan 2054a and HP KE103 (Issue #165)</li>
  <li>Added DYMO LabelWriter Twin Turbo driver (Issue #193)</li>
  <li>Now enable the TLS web interface unless the “no-tls” option is specified
(Issue #161)</li>
  <li>Updated the default state file to match current PAPPL defaults (Issue #129)</li>
  <li>Updated the maximum label width of TSPL printers to 105mm (Issue #141)</li>
  <li>Updated the ZPL driver to automatically disable status commands if the target
printer doesn’t implement that part of ZPL (Issue #161)</li>
  <li>Fixed the margins for DYMO printers (Issue #132)</li>
  <li>Fixed some Brother driver problems (Issue #167)</li>
  <li>Fixed a NumCopies issue in the TSPL driver (Issue #188)</li>
  <li>Fixed list of label sizes for DYMO LabelWriter 4XL (Issue #198)</li>
</ul>

<p>Enjoy!</p>

<p><a class="btn btn-primary" href="https://github.com/michaelrsweet/lprint/releases/tag/v1.4.0">Download LPrint 1.4.0</a>
<a class="btn btn-default" href="https://snapcraft.io/lprint">Install lprint Snap</a>
<a class="btn btn-default" href="/lprint/index.html">Home Page</a></p>]]></content><author><name></name></author><category term="lprint" /><summary type="html"><![CDATA[LPrint v1.4.0 is a feature release that adds support for ESC/POS printers and several other printer models with existing drivers. Changes include: Added ESC/POS driver (Issue #123) Added Vevor Y428BT driver (Issue #130) Added 4 x 7.83 inch label size (Issue #144) Added Arkscan 2054a and HP KE103 (Issue #165) Added DYMO LabelWriter Twin Turbo driver (Issue #193) Now enable the TLS web interface unless the “no-tls” option is specified (Issue #161) Updated the default state file to match current PAPPL defaults (Issue #129) Updated the maximum label width of TSPL printers to 105mm (Issue #141) Updated the ZPL driver to automatically disable status commands if the target printer doesn’t implement that part of ZPL (Issue #161) Fixed the margins for DYMO printers (Issue #132) Fixed some Brother driver problems (Issue #167) Fixed a NumCopies issue in the TSPL driver (Issue #188) Fixed list of label sizes for DYMO LabelWriter 4XL (Issue #198) Enjoy! Download LPrint 1.4.0 Install lprint Snap Home Page]]></summary></entry><entry><title type="html">PAPPL v1.4.11</title><link href="https://www.msweet.org/blog/2026-06-05-pappl-1.4.11.html" rel="alternate" type="text/html" title="PAPPL v1.4.11" /><published>2026-06-05T00:00:00+00:00</published><updated>2026-06-05T00:00:00+00:00</updated><id>https://www.msweet.org/blog/pappl-1.4.11</id><content type="html" xml:base="https://www.msweet.org/blog/2026-06-05-pappl-1.4.11.html"><![CDATA[<p>PAPPL v1.4.11 is now available for download and is a bug fix release.  Changes include:</p>

<ul>
  <li>Updated the programmer’s manual (Issue #418, Issue #419)</li>
  <li>Updated Set-Printer-Attributes validations checks.</li>
  <li>Fixed builds on FreeBSD and other systems without a sys/statfs.h header
(Issue #411)</li>
  <li>Fixed a deadlock issue in the USB gadget shutdown code (Issue #417)</li>
  <li>Fixed a truncation bug when decoding SNMP string values.</li>
  <li>Fixed the handling of the finishings option.</li>
</ul>

<p>Enjoy!</p>

<p><a class="btn btn-primary" href="https://github.com/michaelrsweet/pappl/releases/tag/v1.4.11">Download PAPPL v1.4.11</a>
<a class="btn btn-default" href="/pappl/index.html">Home Page</a></p>]]></content><author><name></name></author><category term="pappl" /><summary type="html"><![CDATA[PAPPL v1.4.11 is now available for download and is a bug fix release. Changes include: Updated the programmer’s manual (Issue #418, Issue #419) Updated Set-Printer-Attributes validations checks. Fixed builds on FreeBSD and other systems without a sys/statfs.h header (Issue #411) Fixed a deadlock issue in the USB gadget shutdown code (Issue #417) Fixed a truncation bug when decoding SNMP string values. Fixed the handling of the finishings option. Enjoy! Download PAPPL v1.4.11 Home Page]]></summary></entry><entry><title type="html">PDFio 1.6.4</title><link href="https://www.msweet.org/blog/2026-06-05-pdfio-1.6.4.html" rel="alternate" type="text/html" title="PDFio 1.6.4" /><published>2026-06-05T00:00:00+00:00</published><updated>2026-06-05T00:00:00+00:00</updated><id>https://www.msweet.org/blog/pdfio-1.6.4</id><content type="html" xml:base="https://www.msweet.org/blog/2026-06-05-pdfio-1.6.4.html"><![CDATA[<p>PDFio 1.6.4 is a bug fix release. Changes include:</p>

<ul>
  <li>Fixed <code class="language-plaintext highlighter-rouge">pdfioPageCopy</code> implementation to not force a CropBox value (Issue #166)</li>
  <li>Fixed AES padding (Issue #167, Issue #169, Issue #170)</li>
</ul>

<p>Enjoy!</p>

<p><a class="btn btn-primary" href="https://github.com/michaelrsweet/pdfio/releases/tag/v1.6.4">Download PDFio v1.6.4</a>
<a class="btn btn-primary" href="/pdfio/index.html">Home Page</a></p>]]></content><author><name></name></author><category term="pdfio" /><summary type="html"><![CDATA[PDFio 1.6.4 is a bug fix release. Changes include: Fixed pdfioPageCopy implementation to not force a CropBox value (Issue #166) Fixed AES padding (Issue #167, Issue #169, Issue #170) Enjoy! Download PDFio v1.6.4 Home Page]]></summary></entry><entry><title type="html">PDFio 1.6.3</title><link href="https://www.msweet.org/blog/2026-04-30-pdfio-1.6.3.html" rel="alternate" type="text/html" title="PDFio 1.6.3" /><published>2026-04-30T00:00:00+00:00</published><updated>2026-04-30T00:00:00+00:00</updated><id>https://www.msweet.org/blog/pdfio-1.6.3</id><content type="html" xml:base="https://www.msweet.org/blog/2026-04-30-pdfio-1.6.3.html"><![CDATA[<p>PDFio 1.6.3 is a bug fix release. Changes include:</p>

<ul>
  <li>Fixed <code class="language-plaintext highlighter-rouge">pdfioPageCopy</code> implementation to not copy the source document’s entire
page tree (Issue #161)</li>
  <li>Fixed AES encryption dictionary name (Issue #163)</li>
  <li>Fixed AES owner key generation (Issue #164)</li>
  <li>Fixed support for empty UTF-16 strings (Issue #165)</li>
</ul>

<p>Enjoy!</p>

<p><a class="btn btn-primary" href="https://github.com/michaelrsweet/pdfio/releases/tag/v1.6.3">Download PDFio v1.6.3</a>
<a class="btn btn-primary" href="/pdfio/index.html">Home Page</a></p>]]></content><author><name></name></author><category term="pdfio" /><summary type="html"><![CDATA[PDFio 1.6.3 is a bug fix release. Changes include: Fixed pdfioPageCopy implementation to not copy the source document’s entire page tree (Issue #161) Fixed AES encryption dictionary name (Issue #163) Fixed AES owner key generation (Issue #164) Fixed support for empty UTF-16 strings (Issue #165) Enjoy! Download PDFio v1.6.3 Home Page]]></summary></entry><entry><title type="html">PDFio 1.6.2</title><link href="https://www.msweet.org/blog/2026-02-15-pdfio-1.6.2.html" rel="alternate" type="text/html" title="PDFio 1.6.2" /><published>2026-02-15T00:00:00+00:00</published><updated>2026-02-15T00:00:00+00:00</updated><id>https://www.msweet.org/blog/pdfio-1.6.2</id><content type="html" xml:base="https://www.msweet.org/blog/2026-02-15-pdfio-1.6.2.html"><![CDATA[<p>PDFio 1.6.2 is a bug fix release. Changes include:</p>

<ul>
  <li>Increased the maximum length of a single string to 128k (Issue #146)</li>
  <li>Added missing range checks to <code class="language-plaintext highlighter-rouge">pdfioArrayCopy</code> and <code class="language-plaintext highlighter-rouge">pdfioDictCopy</code>.</li>
  <li>Refactored PDF encryption code to fix unlocking with certain files.</li>
  <li>Improved xref table loop detection (Issue #148)</li>
  <li>Changed how duplicate objects are handled in PDF files (Issue #155)</li>
  <li>Fixed xref reconstruction for objects lacking a <code class="language-plaintext highlighter-rouge">Type</code> value.</li>
  <li>Fixed <code class="language-plaintext highlighter-rouge">pdfioPageOpenStream</code> for indirect <code class="language-plaintext highlighter-rouge">Contents</code> arrays.</li>
  <li>Fixed an error propagation bug when reading too-long values (Issue #146)</li>
  <li>Fixed a bug when converting Unicode characters above plane 0 (issue #159)</li>
  <li>Fixed a Clang warning.</li>
</ul>

<p>Enjoy!</p>

<p><a class="btn btn-primary" href="https://github.com/michaelrsweet/pdfio/releases/tag/v1.6.2">Download PDFio v1.6.2</a>
<a class="btn btn-primary" href="/pdfio/index.html">Home Page</a></p>]]></content><author><name></name></author><category term="pdfio" /><summary type="html"><![CDATA[PDFio 1.6.2 is a bug fix release. Changes include: Increased the maximum length of a single string to 128k (Issue #146) Added missing range checks to pdfioArrayCopy and pdfioDictCopy. Refactored PDF encryption code to fix unlocking with certain files. Improved xref table loop detection (Issue #148) Changed how duplicate objects are handled in PDF files (Issue #155) Fixed xref reconstruction for objects lacking a Type value. Fixed pdfioPageOpenStream for indirect Contents arrays. Fixed an error propagation bug when reading too-long values (Issue #146) Fixed a bug when converting Unicode characters above plane 0 (issue #159) Fixed a Clang warning. Enjoy! Download PDFio v1.6.2 Home Page]]></summary></entry><entry><title type="html">HTMLDOC 1.9.23</title><link href="https://www.msweet.org/blog/2026-01-28-htmldoc-1.9.23.html" rel="alternate" type="text/html" title="HTMLDOC 1.9.23" /><published>2026-01-28T00:00:00+00:00</published><updated>2026-01-28T00:00:00+00:00</updated><id>https://www.msweet.org/blog/htmldoc-1.9.23</id><content type="html" xml:base="https://www.msweet.org/blog/2026-01-28-htmldoc-1.9.23.html"><![CDATA[<p>HTMLDOC 1.9.23 is a bug fix release.  Changes include:</p>

<ul>
  <li>Fixed a regression in list handling that caused a crash for empty list items (Issue #553)</li>
  <li>Fixed a regression in the number of rendered table of contents levels in PDF and PostScript output (Issue #554)</li>
</ul>

<p>Binaries are available from Github for Windows 10+ and macOS 11+, and through the Snapcraft store for Linux.</p>

<p>Enjoy!</p>

<p><a class="btn btn-primary" href="https://github.com/michaelrsweet/htmldoc/releases/tag/v1.9.23">Download HTMLDOC 1.9.23</a>
<a class="btn btn-default" href="https://snapcraft.io/htmldoc">Install HTMLDOC 1.9.23 Snap</a>
<a class="btn btn-default" href="/htmldoc/index.html">Home Page</a></p>]]></content><author><name></name></author><category term="htmldoc" /><summary type="html"><![CDATA[HTMLDOC 1.9.23 is a bug fix release. Changes include: Fixed a regression in list handling that caused a crash for empty list items (Issue #553) Fixed a regression in the number of rendered table of contents levels in PDF and PostScript output (Issue #554) Binaries are available from Github for Windows 10+ and macOS 11+, and through the Snapcraft store for Linux. Enjoy! Download HTMLDOC 1.9.23 Install HTMLDOC 1.9.23 Snap Home Page]]></summary></entry><entry><title type="html">What is a Security Bug?</title><link href="https://www.msweet.org/blog/2026-01-13-what-is-a-security-bug.html" rel="alternate" type="text/html" title="What is a Security Bug?" /><published>2026-01-13T00:00:00+00:00</published><updated>2026-01-13T00:00:00+00:00</updated><id>https://www.msweet.org/blog/what-is-a-security-bug</id><content type="html" xml:base="https://www.msweet.org/blog/2026-01-13-what-is-a-security-bug.html"><![CDATA[<p>I’ve had the privilege of working with a lot of security researchers throughout
my career.  Every one of them has been passionate about their work and the
issues they report, and my work has greatly benefitted from their contributions.</p>

<p>Unfortunately, the software security industry has created an environment where
CVEs (Common Vulnerabilities and Exposures) have become an economic driver.
Researchers seem to increasingly need published CVEs or bug bounties to justify
the time they spend trying to break software in new and interesting ways.</p>

<p>This has predictably led to more software bugs being reported as critical
security vulnerabilities, with push-back and frustration from developers when
those bugs are either not exploitable or not in that software at all!  In
addition, many issues are discovered and reported automatically (“AI”,
“fuzzing”, etc.) without sufficient investigation/analysis by the reporter.
Finally, security updates trigger an emergency response for everyone involved,
causing further disruption to the software development process.  Thus, it is
important to clearly identify which bugs rate a CVE and which ones are ordinary
bugs.</p>

<!--more-->

<h2 id="bugs-vs-vulnerabilities">Bugs vs. Vulnerabilities</h2>

<p>CVE defines a vulnerability as a weakness in software or hardware components
<em>that can be exploited</em>.  In addition, there is a
<a href="https://cwe.mitre.org/">list of common weaknesses</a> that provide guidance on which bugs get CVEs
and which bugs don’t, and you are expected to connect a weakness to an actual,
exploitable vulnerability or exposure before filing a CVE.  Unfortunately, CWEs
are often applied overly broadly to justify why a bug should be treated as the
most serious of security issues, e.g.:</p>

<ul>
  <li><em>This critical issue exposes CWE-999 and must be assigned a CVE or given a bug bounty!</em></li>
</ul>

<p>One common over-application of CWEs is for so-called Denial of Service (DoS)
vulnerabilities in software that does not provide a service - you can’t deny
something that doesn’t exist.  I’ve had reporters argue that, “my server uses
this library and the bug in this library causes a denial of service for my
server”, however it is the responsibility of the <em>server</em> to protect against
DoS attacks, not a subordinate library, because only the server knows what is an
appropriate use of memory, CPU, time, and other resources.</p>

<blockquote>
  <p>Note: I’m not talking about issues that cause a crash in a library due to
buffer overflow/underflow, divide by 0, etc.  While there are ways to mitigate
such risks, those sorts of issues can be exploitable in unpredictable ways and
need to be assigned CVEs for something other than a Denial of Service
vulnerability.  Running out of memory or taking a long time to perform an
operation because you load a large file is not a CVE.</p>
</blockquote>

<p>I also sometimes see security reports for incorrect API usage such as passing
<code class="language-plaintext highlighter-rouge">NULL</code> pointers where such pointers are not allowed, passing the wrong kinds of
pointers or objects to an API, or using an unstable (private) API.  These are
not vulnerabilities in the API because they are not caused by an attacker but
<em>by the developer</em>.  They are also <em>not exploitable</em> as defined for CVEs,
although the application itself might be exploitable.</p>

<p>Identifying weaknesses is important, but so is determining whether a weakness
can be exploited and what the scope of the vulnerability and exposure is.  If a
weakness requires playing a <a href="https://memory-alpha.fandom.com/wiki/Fizzbin">game of Fizzbin</a> or is simply not
exploitable, then it is not a vulnerability and does not get a CVE.</p>

<p>Sometimes a bug is just a bug.</p>]]></content><author><name></name></author><category term="website" /><summary type="html"><![CDATA[I’ve had the privilege of working with a lot of security researchers throughout my career. Every one of them has been passionate about their work and the issues they report, and my work has greatly benefitted from their contributions. Unfortunately, the software security industry has created an environment where CVEs (Common Vulnerabilities and Exposures) have become an economic driver. Researchers seem to increasingly need published CVEs or bug bounties to justify the time they spend trying to break software in new and interesting ways. This has predictably led to more software bugs being reported as critical security vulnerabilities, with push-back and frustration from developers when those bugs are either not exploitable or not in that software at all! In addition, many issues are discovered and reported automatically (“AI”, “fuzzing”, etc.) without sufficient investigation/analysis by the reporter. Finally, security updates trigger an emergency response for everyone involved, causing further disruption to the software development process. Thus, it is important to clearly identify which bugs rate a CVE and which ones are ordinary bugs.]]></summary></entry><entry><title type="html">TTF v1.1.0</title><link href="https://www.msweet.org/blog/2025-12-31-ttf-1.1.0.html" rel="alternate" type="text/html" title="TTF v1.1.0" /><published>2025-12-31T00:00:00+00:00</published><updated>2025-12-31T00:00:00+00:00</updated><id>https://www.msweet.org/blog/ttf-1.1.0</id><content type="html" xml:base="https://www.msweet.org/blog/2025-12-31-ttf-1.1.0.html"><![CDATA[<p>This is a feature release of TTF, a simple C library for using TrueType
and OpenType font files.  Changes include:</p>

<ul>
  <li>Added configure script for better build system compatibility.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">ttfCache</code> functions to access user- and system-installed fonts (Issue #5)</li>
  <li>Added <code class="language-plaintext highlighter-rouge">ttfCreateData</code> function to create a font from a memory buffer.</li>
  <li>Added <code class="language-plaintext highlighter-rouge">ttfContainsChar</code> and <code class="language-plaintext highlighter-rouge">ttfContainsChars</code> functions to determine whether a font contains the necessary characters (Issue #2)</li>
  <li>Added <code class="language-plaintext highlighter-rouge">ttfGetKernedExtents</code> function to get kerned extents (Issue #6)</li>
  <li>Added guards against fonts claiming they have 0 characters.</li>
  <li>Added stddef.h include to ttf.h.</li>
  <li>Added support for more kinds of TrueType/OpenType fonts.</li>
  <li>Fixed range checking in <code class="language-plaintext highlighter-rouge">ttfGetExtents</code> (Issue #9)</li>
  <li>Fixed potential heap/integer overflow issues in the TrueType cmap code.</li>
  <li>Fixed underflow in TrueType cmap code.</li>
</ul>

<p>Enjoy!</p>

<p><a class="btn btn-primary" href="https://github.com/michaelrsweet/ttf/releases/tag/v1.1.0">Download TTF v1.1.0</a>
<a class="btn btn-primary" href="/ttf/index.html">Home Page</a>
<a class="btn btn-default" href="https://github.com/michaelrsweet/ttf">Github Project</a></p>]]></content><author><name></name></author><category term="ttf" /><summary type="html"><![CDATA[This is a feature release of TTF, a simple C library for using TrueType and OpenType font files. Changes include: Added configure script for better build system compatibility. Added ttfCache functions to access user- and system-installed fonts (Issue #5) Added ttfCreateData function to create a font from a memory buffer. Added ttfContainsChar and ttfContainsChars functions to determine whether a font contains the necessary characters (Issue #2) Added ttfGetKernedExtents function to get kerned extents (Issue #6) Added guards against fonts claiming they have 0 characters. Added stddef.h include to ttf.h. Added support for more kinds of TrueType/OpenType fonts. Fixed range checking in ttfGetExtents (Issue #9) Fixed potential heap/integer overflow issues in the TrueType cmap code. Fixed underflow in TrueType cmap code. Enjoy! Download TTF v1.1.0 Home Page Github Project]]></summary></entry></feed>