1#!/usr/bin/python3 2 3# Copyright 2020 Google LLC 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17import atheris 18with atheris.instrument_imports(): 19 import sys 20 import pygments 21 import pygments.formatters.html 22 import pygments.lexers 23 24formatter = pygments.formatters.html.HtmlFormatter() 25# pygments.LEXERS.values() is a list of tuples like this, with some of then empty: 26# (textual class name, longname, tuple of aliases, tuple of filename patterns, tuple of mimetypes) 27LEXERS = [l[2][0] for l in pygments.lexers.LEXERS.values() if l[2]] 28 29 30def TestOneInput(data: bytes) -> int: 31 fdp = atheris.FuzzedDataProvider(data) 32 random_lexer = pygments.lexers.get_lexer_by_name(fdp.PickValueInList(LEXERS)) 33 str_data = fdp.ConsumeUnicode(atheris.ALL_REMAINING) 34 35 pygments.highlight(str_data, random_lexer, formatter) 36 return 0 37 38 39atheris.Setup(sys.argv, TestOneInput) 40atheris.Fuzz() 41