From: Brett Smith Date: Fri, 30 May 2014 13:08:50 +0000 (-0400) Subject: 2752: Avoid ResumeCache name collisions from concatenating paths. X-Git-Tag: 1.1.0~2587^2~1^2~4 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/83b6a3fdd9a0fe432758dd44acf252bbd129a930?hp=06cf8e35c69540ae44890f8e96961e31cb7fbe66 2752: Avoid ResumeCache name collisions from concatenating paths. --- diff --git a/sdk/python/arvados/commands/put.py b/sdk/python/arvados/commands/put.py index 3229125887..12f464e605 100644 --- a/sdk/python/arvados/commands/put.py +++ b/sdk/python/arvados/commands/put.py @@ -172,7 +172,7 @@ class ResumeCache(object): md5 = hashlib.md5() md5.update(arvados.config.get('ARVADOS_API_HOST', '!nohost')) realpaths = sorted(os.path.realpath(path) for path in args.paths) - md5.update(''.join(realpaths)) + md5.update('\0'.join(realpaths)) if any(os.path.isdir(path) for path in realpaths): md5.update(str(max(args.max_manifest_depth, -1))) elif args.filename: diff --git a/sdk/python/tests/test_arv-put.py b/sdk/python/tests/test_arv-put.py index 41fb33041a..b19e1c5b38 100644 --- a/sdk/python/tests/test_arv-put.py +++ b/sdk/python/tests/test_arv-put.py @@ -65,6 +65,12 @@ class ArvadosPutResumeCacheTest(ArvadosBaseTestCase): self.cache_path_from_arglist(['-', '--filename', 'stdin']), self.cache_path_from_arglist(['--filename', 'stdin', '-'])) + def test_cache_names_differ_for_similar_paths(self): + # This test needs names at / that don't exist on the real filesystem. + self.assertNotEqual( + self.cache_path_from_arglist(['/_arvputtest1', '/_arvputtest2']), + self.cache_path_from_arglist(['/_arvputtest1/_arvputtest2'])) + def test_cache_names_ignore_irrelevant_arguments(self): # Workaround: parse_arguments bails on --filename with a directory. path1 = self.cache_path_from_arglist(['/tmp'])