From 65c739eff6b031cc12cc7665522c5d0b03c8ca0d Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Fri, 1 Aug 2025 14:01:33 +0200 Subject: [PATCH] refs #2581 try several encodings on hivexregedit output --- CHANGELOG.md | 6 ++++++ ogclient/lib/python3/InventoryLib.py | 12 ++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c273b2..4c822e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.1.2] - 2025-07-31 + +### Changed + +- Try several encodings on hivexregedit output + ## [1.1.1] - 2025-07-29 ### Fixed diff --git a/ogclient/lib/python3/InventoryLib.py b/ogclient/lib/python3/InventoryLib.py index 78ec75a..9c78f5c 100644 --- a/ogclient/lib/python3/InventoryLib.py +++ b/ogclient/lib/python3/InventoryLib.py @@ -266,8 +266,16 @@ def ogListSoftware (disk, par): if shutil.which ('hivexregedit'): hive = RegistryLib.ogGetHivePath (mntdir, 'software') if hive: - cmd1_out = subprocess.run (['hivexregedit', '--unsafe-printable-strings', '--export', hive, r'\Microsoft\Windows\CurrentVersion\Uninstall'], capture_output=True, text=True, encoding='utf-16le').stdout - cmd1_out += subprocess.run (['hivexregedit', '--unsafe-printable-strings', '--export', hive, r'\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'], capture_output=True, text=True, encoding='utf-16le').stdout + cmd1_out_bytes = subprocess.run (['hivexregedit', '--unsafe-printable-strings', '--export', hive, r'\Microsoft\Windows\CurrentVersion\Uninstall'], capture_output=True).stdout + cmd1_out_bytes += subprocess.run (['hivexregedit', '--unsafe-printable-strings', '--export', hive, r'\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'], capture_output=True).stdout + try: + cmd1_out = cmd1_out_bytes.decode ('utf-16le') + except: + try: + cmd1_out = cmd1_out_bytes.decode ('utf-8') + except: + cmd1_out = cmd1_out_bytes.decode ('latin1') + out = name = '' for l in cmd1_out.splitlines(): words = l.split ('"')