skia2/resources/sksl
John Stiles 683ae40560 Fix for fuzzer-discovered error with deeply-nested expressions.
The fuzzer constructs a long, valid nonsense expression
(x+x+x-x+x-x, etc.) which exceeds parse depth. At that point, the token
stream points to a `+` token. The parser attempts to consume a new
statement but stops in `unaryExpression`; this fails again, due to the
max parse-depth, but doesn't consume a token. The parser continues
trying to parse the statement, but stopping in `unaryExpression`, making
no forward progress in an infinite loop.

I've made a couple of changes as a result.
- Exceeding the max parse depth now sets `fEncounteredFatalError`.
- Encountering a fatal error causes block() to immediately halt. This
  actually undoes a few of the arbitrary changes from
  http://review.skia.org/506463 but not in a bad way.
- `unaryExpression()` now consumes a token before checking parse-depth.
- `structDeclaration()` had a similar issue where it could potentially
  fail without consuming any tokens; this is fixed as well.
- Some unnecessarily-nested logic in ternaryExpression() was flattened
  while I tried to ensure that it always consumes a token.

Change-Id: I52c2161965ffbcef1185761ca6897ec1cba5df89
Bug: oss-fuzz:44551
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/507436
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
2022-02-11 14:25:34 +00:00
..
blend Remove SkBlendMode from SkSL 2021-06-16 21:01:30 +00:00
errors Fix for fuzzer-discovered error with deeply-nested expressions. 2022-02-11 14:25:34 +00:00
es2_conformance Mark symbols starting with gl_ as reserved words. 2021-11-01 22:43:44 +00:00
folding Fill out matrix-folding ES3 tests. 2022-02-07 19:53:00 +00:00
glsl Move backend-specific error tests out of errors/ test folder. 2022-02-08 14:18:46 +00:00
inliner In SkSL tests, don't force opaque output 2022-02-03 17:25:35 +00:00
intrinsics Add missing intrinsic tests for abs/max/min(genIType), clamp(genType) 2022-02-04 14:42:17 +00:00
metal Reland "Restrict where 'binding' and 'set' can appear" 2021-11-23 18:03:24 +00:00
runtime Report an error if an out param is never written to. 2022-01-26 21:42:13 +00:00
runtime_errors Add SkSL error tests for runtime_errors directory. 2022-02-10 14:24:39 +00:00
shared Fix up SkSL test on Wembley. 2022-01-31 21:17:40 +00:00
spirv Move backend-specific error tests out of errors/ test folder. 2022-02-08 14:18:46 +00:00
workarounds Remove the "in blend modes randomly fail for all zero vec" workaround 2021-10-21 16:54:51 +00:00
README.txt Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
update_fuzzer.py Implement parser for ES2 conformance '.test' files. 2021-09-29 16:48:14 +00:00

This directory contains source files for testing skslc compilation.
The compiled output files are in the /tests/sksl/ directory.