def build_fuzzers(self): """Moves the source code we want to fuzz into the project builder and builds the fuzzers from that source code. Returns True on success.""" docker_args, docker_container = docker.get_base_docker_run_args( self.workspace, self.config.sanitizer, self.config.language, self.config.architecture, self.config.docker_in_docker) if not docker_container: docker_args.extend( _get_docker_build_fuzzers_args_not_container( self.host_repo_path)) build_command = self.ci_system.get_build_command( self.host_repo_path, self.image_repo_path) docker_args.extend([ docker.get_project_image_name(self.config.oss_fuzz_project_name), '/bin/bash', '-c', build_command, ]) logging.info('Building with %s sanitizer.', self.config.sanitizer) # TODO(metzman): Stop using helper.docker_run so we can get rid of # docker.get_base_docker_run_args and merge its contents into # docker.get_base_docker_run_command. if not helper.docker_run(docker_args): logging.error('Building fuzzers failed.') return False return True
def delete_unneeded_docker_images(config): """Deletes unneeded docker images if running in an environment with low disk space.""" if not config.low_disk_space: return logging.info('Deleting builder docker images to save disk space.') project_image = docker.get_project_image_name(config.project_name) images = [ project_image, docker.BASE_RUNNER_TAG, docker.MSAN_LIBS_BUILDER_TAG, ] docker.delete_images(images)
def _copy_repo_from_image(self, image_repo_path): self._make_repo_storage_dir() repo_name = os.path.basename(image_repo_path) host_repo_path = os.path.join(self._repo_dir, repo_name) bash_command = f'cp -r {image_repo_path} {host_repo_path}' docker_args, _ = docker.get_base_docker_run_args( self.workspace, self.config.sanitizer, self.config.language, self.config.docker_in_docker) docker_args.extend([ docker.get_project_image_name(self.config.oss_fuzz_project_name), '/bin/bash', '-c', bash_command ]) if not helper.docker_run(docker_args): raise RuntimeError('Failed to copy repo.') return repo_manager.RepoManager(host_repo_path)
def delete_unneeded_docker_images(config): """Deletes unneeded docker images if running in an environment with low disk space.""" if not config.low_disk_space: return logging.info('Deleting builder docker images to save disk space.') project_image = docker.get_project_image_name(config.oss_fuzz_project_name) images = [ project_image, docker.BASE_BUILDER_TAG, docker.BASE_BUILDER_TAG + '-go', docker.BASE_BUILDER_TAG + '-jvm', docker.BASE_BUILDER_TAG + '-python', docker.BASE_BUILDER_TAG + '-rust', docker.BASE_BUILDER_TAG + '-swift', ] docker.delete_images(images)
def build_fuzzers(self): """Moves the source code we want to fuzz into the project builder and builds the fuzzers from that source code. Returns True on success.""" docker_args = get_common_docker_args(self.config.sanitizer, self.config.language) container = utils.get_container_name() if container: docker_args.extend( _get_docker_build_fuzzers_args_container( self.out_dir, container)) else: docker_args.extend( _get_docker_build_fuzzers_args_not_container( self.out_dir, self.host_repo_path)) if self.config.sanitizer == 'memory': docker_args.extend( _get_docker_build_fuzzers_args_msan(self.work_dir)) self.handle_msan_prebuild(container) docker_args.extend([ docker.get_project_image_name(self.config.project_name), '/bin/bash', '-c', ]) rm_path = os.path.join(self.image_repo_path, '*') image_src_path = os.path.dirname(self.image_repo_path) bash_command = 'rm -rf {0} && cp -r {1} {2} && compile'.format( rm_path, self.host_repo_path, image_src_path) docker_args.append(bash_command) logging.info('Building with %s sanitizer.', self.config.sanitizer) if helper.docker_run(docker_args): # docker_run returns nonzero on failure. logging.error('Building fuzzers failed.') return False if self.config.sanitizer == 'memory': self.handle_msan_postbuild(container) return True
def build_fuzzers(self): """Moves the source code we want to fuzz into the project builder and builds the fuzzers from that source code. Returns True on success.""" docker_args, docker_container = docker.get_base_docker_run_args( self.workspace, self.config.sanitizer, self.config.language) if not docker_container: docker_args.extend( _get_docker_build_fuzzers_args_not_container( self.host_repo_path)) if self.config.sanitizer == 'memory': docker_args.extend( _get_docker_build_fuzzers_args_msan(self.workspace.work)) self.handle_msan_prebuild(docker_container) docker_args.extend([ docker.get_project_image_name(self.config.project_name), '/bin/bash', '-c', ]) rm_path = os.path.join(self.image_repo_path, '*') image_src_path = os.path.dirname(self.image_repo_path) bash_command = (f'rm -rf {rm_path} && cp -r {self.host_repo_path} ' f'{image_src_path} && compile') docker_args.append(bash_command) logging.info('Building with %s sanitizer.', self.config.sanitizer) # TODO(metzman): Stop using helper.docker_run so we can get rid of # docker.get_base_docker_run_args and merge its contents into # docker.get_base_docker_run_command. if not helper.docker_run(docker_args): logging.error('Building fuzzers failed.') return False if self.config.sanitizer == 'memory': self.handle_msan_postbuild(docker_container) return True
def test_get_project_image(self): """Tests that get_project_image_name works as intended.""" project = 'my-project' self.assertEqual(docker.get_project_image_name(project), 'gcr.io/oss-fuzz/my-project')
def test_get_project_image_name(self): """Tests that get_project_image_name works as intended.""" project_name = 'myproject' result = docker.get_project_image_name(project_name) self.assertEqual(result, 'gcr.io/oss-fuzz/myproject')