Go to file
John Stiles 4cb0c37c96 Fix undefined behavior in recursion detection.
We were performing lookups in fCallGraph using `operator[]` while
looping through fCallGraph via range-based for. `operator[]` will add
entries to the map if the key is not found. This happens if built-in
functions are called, such as `sin`, `cos`, `tan`, etc; this mutates
the call graph mid-loop, which causes unpredictable behavior. In
practice, this can occasionally cause a rehash, which reorders the hash
map and causes items to be skipped over or checked twice.

This flaw meant that over many repeated runs, recursion was occasionally
not detected, and compiling a program with recursion would succeed a
small percentage of the time. The PipelineStageCodeGenerator asserts and
then crashes when presented with such a program.

The fCallGraph is now held as a const pointer, which makes it
impossible to mutate, and lookups are done via .find() which are
non-mutating. Compiling the fuzzer-generated program 10,000 times now
succeeds.

Change-Id: I6915fcfa4a0b1e9f86e5eb4ffd053bc718aed9fb
Bug: oss-fuzz:36655
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/437096
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2021-08-05 21:59:26 +00:00
animations first cut at a checkbox 2009-10-21 19:41:10 +00:00
bazel bazel baby steps 2020-09-14 15:18:32 +00:00
bench Fix Wunused-but-set-variable warnings 2021-08-05 21:49:18 +00:00
bin Fix fetch-sk on Windows 2021-08-02 22:12:12 +00:00
build/fuchsia [fuchsia] Fix fidlc command. 2020-06-10 03:29:24 +00:00
build_overrides fix tint roll - enable tint_build_wgsl_writer 2021-07-01 00:32:40 +00:00
client_utils/android Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
demos.skia.org [canvaskit] Fix demo image link 2021-06-03 12:57:50 +00:00
dm Add dm via-option rtblend- to test using Runtime Blends. 2021-07-20 17:43:50 +00:00
docker [infra] Update cmake docker image to be Debian 10 2021-07-23 11:21:31 +00:00
docs/examples Hide getBlendMode() 2021-07-07 20:55:26 +00:00
example Remove SDL from DEPS (and SDL example that used it) 2021-05-27 21:37:57 +00:00
experimental Fix -Wdeprecated-copy warnings 2021-08-03 16:06:11 +00:00
fuzz Fix Wunused-but-set-variable warnings 2021-08-05 21:49:18 +00:00
gm Fix Wunused-but-set-variable warnings 2021-08-05 21:49:18 +00:00
gn Fix fuzzer-discovered error with swizzling matrices. 2021-08-05 21:59:23 +00:00
include Make compressedBackendFormat accessible from GrContextThreadSafeProxy 2021-08-05 21:44:11 +00:00
infra [infra] Update buildbot repo used by go.mod 2021-08-05 19:12:58 +00:00
modules Revert "Reland "uniform Ptr (UPtr) is a sub class of Ptr"" 2021-08-05 01:11:41 +00:00
platform_tools [androidkit] add seekTime and seekFrame for SkottieView util view 2021-07-29 14:12:54 +00:00
resources Fix fuzzer-discovered error with swizzling matrices. 2021-08-05 21:59:23 +00:00
samplecode Use SkClipOp::kFoo instead of kFoo_SkClipOp from SkClipOpPriv 2021-08-03 18:08:21 +00:00
site Update minimum Linux versions 2021-07-16 16:20:26 +00:00
specs Fix CanvasKit generated documentation to work with emscripten 1.39.16. 2020-05-27 12:23:32 +00:00
src Fix undefined behavior in recursion detection. 2021-08-05 21:59:26 +00:00
tests Fix fuzzer-discovered error with swizzling matrices. 2021-08-05 21:59:23 +00:00
third_party Reland "Experimental ICU runtime linking" 2021-07-27 19:51:31 +00:00
tools Fix Wunused-but-set-variable warnings 2021-08-05 21:49:18 +00:00
.bazelignore bazel baby steps 2020-09-14 15:18:32 +00:00
.clang-format no more bin packing in .clang-format 2021-03-04 17:22:50 +00:00
.clang-tidy Disable ClangTidy namespace comments for short blocks. 2020-08-24 14:01:22 +00:00
.gitignore add mskps/ to .gitignore 2021-07-06 21:04:55 +00:00
.gn Pre-emptive fix for upcoming ANGLE change. 2021-01-08 17:23:52 +00:00
AUTHORS Correct a typo in build_workaround_header.py 2021-07-29 13:06:01 +00:00
BUILD.bazel bazel baby steps 2020-09-14 15:18:32 +00:00
BUILD.gn Feed all top-level GPU accessors through skgpu::BaseDevice (take 2) 2021-07-26 14:56:37 +00:00
codereview.settings Make uploading to Gerrit the default for Skia 2016-11-09 19:07:56 +00:00
CONTRIBUTING Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
CQ_COMMITTERS Moved committer list to chrome-infra-auth and deleted it from the repo 2015-09-02 13:37:54 -07:00
DEPS Roll third_party/wuffs to version 0.3.0-beta.8 2021-08-05 21:54:21 +00:00
DIR_METADATA Move metadata in OWNERS files to DIR_METADATA files 2021-02-02 23:41:54 +00:00
go.mod [infra] Update buildbot repo used by go.mod 2021-08-05 19:12:58 +00:00
go.sum [infra] Update buildbot repo used by go.mod 2021-08-05 19:12:58 +00:00
LICENSE LICENSE file: clean up 2019-11-22 21:59:03 +00:00
PRESUBMIT.py [fiddle] Add PRESUBMIT rule to run tools/fiddle/make_all_examples_cpp.py 2021-07-01 15:20:57 +00:00
public.bzl Reland "Experimental ICU runtime linking" 2021-07-27 19:51:31 +00:00
README Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
README.chromium Update README.chromium. 2015-06-11 13:19:24 -07:00
RELEASE_NOTES.txt Rename/simplify SkCanvas::resetClip() and make recordable 2021-07-23 19:05:42 +00:00
whitespace.txt Test SkCQ 2021-07-24 21:07:28 +00:00
WORKSPACE.bazel bazel baby steps 2020-09-14 15:18:32 +00:00

Skia is a complete 2D graphic library for drawing Text, Geometries, and Images.

See full details, and build instructions, at https://skia.org.