From 438ac3262851b3915ac8c37db7800b8a9008068c Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 3 Jun 2016 13:38:33 +0100 Subject: bitbake: 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. (Bitbake rev: 12d43cf45ba48e3587392f15315d92a1a53482ef) Signed-off-by: Richard Purdie --- bitbake/lib/bb/codeparser.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'bitbake/lib/bb/codeparser.py') diff --git a/bitbake/lib/bb/codeparser.py b/bitbake/lib/bb/codeparser.py index 6ed2adeed9..25938d6586 100644 --- a/bitbake/lib/bb/codeparser.py +++ b/bitbake/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) -- cgit v1.2.3-54-g00ecf