summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Laß <bevan@bi-co.net>2024-01-02 14:37:19 +0100
committercasept <davids.paskevics@gmail.com>2024-01-31 13:14:22 +0000
commite7eaa48daf65046dedc97574cf433296e27db5bd (patch)
treec2b553007c5ac118a22b1a4caef3ca3c0d7e5312
parentf4c9be64648848eb7ec94e165ddcbb2df7ef8e25 (diff)
downloadbcfg2-e7eaa48daf65046dedc97574cf433296e27db5bd.tar.gz
bcfg2-e7eaa48daf65046dedc97574cf433296e27db5bd.tar.bz2
bcfg2-e7eaa48daf65046dedc97574cf433296e27db5bd.zip
utils: fix is_string when called with bytestring
ord() cannot be called on bytes. Hence, encoded strings need to be handled separately.
-rw-r--r--src/lib/Bcfg2/Utils.py22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/lib/Bcfg2/Utils.py b/src/lib/Bcfg2/Utils.py
index b043fd11c..4d2ddebd8 100644
--- a/src/lib/Bcfg2/Utils.py
+++ b/src/lib/Bcfg2/Utils.py
@@ -344,14 +344,16 @@ class classproperty(object): # pylint: disable=C0103
def is_string(strng, encoding):
""" Returns true if the string contains no ASCII control
characters and can be decoded from the specified encoding. """
- for char in strng:
- if ord(char) < 9 or ord(char) > 13 and ord(char) < 32:
+ if hasattr(strng, "decode"):
+ for char in strng:
+ if char < 9 or char > 13 and char < 32:
+ return False
+ try:
+ strng.decode(encoding)
+ except: # pylint: disable=W0702
return False
- if not hasattr(strng, "decode"):
- # py3k
- return True
- try:
- strng.decode(encoding)
- return True
- except: # pylint: disable=W0702
- return False
+ else:
+ for char in strng:
+ if ord(char) < 9 or ord(char) > 13 and ord(char) < 32:
+ return False
+ return True