mirror of
https://github.com/overcuriousity/trace.git
synced 2025-12-20 04:52:21 +00:00
Fix UTF-8 decoding error when verifying signatures with international characters
Issue: GPG verification crashed with UnicodeDecodeError when signatures contained international characters (German ö, Turkish ü, etc.) in the signed content. Error: "'utf-8' codec can't decode byte 0xf6 in position 160" Root cause: subprocess.Popen was using default text decoding without handling encoding errors gracefully. Solution: 1. Changed LC_ALL/LANG from 'C' to 'C.UTF-8' to ensure GPG uses UTF-8 2. Added explicit encoding='utf-8' parameter to Popen 3. Added errors='replace' to replace invalid UTF-8 bytes instead of crashing This allows the verification to proceed even if GPG's output contains characters that don't decode cleanly, ensuring robustness with multilingual content.
This commit is contained in:
@@ -46,8 +46,8 @@ class Crypto:
|
|||||||
# Force English output for consistent parsing across locales
|
# Force English output for consistent parsing across locales
|
||||||
import os
|
import os
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
env['LC_ALL'] = 'C'
|
env['LC_ALL'] = 'C.UTF-8' # Use UTF-8 variant to handle international characters
|
||||||
env['LANG'] = 'C'
|
env['LANG'] = 'C.UTF-8'
|
||||||
|
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
['gpg', '--verify'],
|
['gpg', '--verify'],
|
||||||
@@ -55,6 +55,8 @@ class Crypto:
|
|||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
text=True,
|
text=True,
|
||||||
|
encoding='utf-8',
|
||||||
|
errors='replace', # Replace invalid UTF-8 sequences instead of crashing
|
||||||
env=env
|
env=env
|
||||||
)
|
)
|
||||||
stdout, stderr = proc.communicate(input=signed_content, timeout=10)
|
stdout, stderr = proc.communicate(input=signed_content, timeout=10)
|
||||||
|
|||||||
Reference in New Issue
Block a user