aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2016-06-03 13:38:33 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-06-03 13:48:20 +0100
commit12d43cf45ba48e3587392f15315d92a1a53482ef (patch)
tree523f2becd94e23f9d88a3e33484df8e74f35cf30 /lib
parent633c0c19f87a92497a7e9771811cdc953e1b7047 (diff)
downloadbitbake-12d43cf45ba48e3587392f15315d92a1a53482ef.tar.gz
codeparser: Use hashlib for hashing, not hash()
"hash() is randomised by default each time you start a new instance of recent versions (Python3.3+) to prevent dictionary insertion DOS attacks" which means we need to use hashlib.md5 to get consistent values for the codeparser cache under python 3. Prior to this, the codeparser cache was effectively useless under python3 as shown by performance regressions. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/bb/codeparser.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/bb/codeparser.py b/lib/bb/codeparser.py
index 6ed2adeed..25938d658 100644
--- a/lib/bb/codeparser.py
+++ b/lib/bb/codeparser.py
@@ -6,12 +6,16 @@ import pickle
import bb.pysh as pysh
import os.path
import bb.utils, bb.data
+import hashlib
from itertools import chain
from bb.pysh import pyshyacc, pyshlex, sherrors
from bb.cache import MultiProcessCache
logger = logging.getLogger('BitBake.CodeParser')
+def bbhash(s):
+ return hashlib.md5(s.encode("utf-8")).hexdigest()
+
def check_indent(codestr):
"""If the code is indented, add a top level piece of code to 'remove' the indentation"""
@@ -270,7 +274,7 @@ class PythonParser():
if not node or not node.strip():
return
- h = hash(str(node))
+ h = bbhash(str(node))
if h in codeparsercache.pythoncache:
self.references = set(codeparsercache.pythoncache[h].refs)
@@ -315,7 +319,7 @@ class ShellParser():
commands it executes.
"""
- h = hash(str(value))
+ h = bbhash(str(value))
if h in codeparsercache.shellcache:
self.execs = set(codeparsercache.shellcache[h].execs)