Fuzz introspector
For issues and ideas: https://github.com/ossf/fuzz-introspector/issues

Project functions overview

The following table shows data about each function in the project. The functions included in this table correspond to all functions that exist in the executables of the fuzzers. As such, there may be functions that are from third-party libraries.

For further technical details on the meaning of columns in the below table, please see the Glossary .

Func name Functions filename Args Function call depth Reached by Fuzzers Runtime reached by Fuzzers Combined reached by Fuzzers Fuzzers runtime hit Func lines hit % I Count BB Count Cyclomatic complexity Functions reached Reached by functions Accumulated cyclomatic complexity Undiscovered complexity

Fuzzer details

Fuzzer: fuzz/fuzz_eval.c

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The project has no code coverage. Will not display blockers as blockers depend on code coverage.

Fuzzer: fuzz/fuzz_module_export.c

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The project has no code coverage. Will not display blockers as blockers depend on code coverage.

Fuzzer: fuzz/fuzz_regexp.c

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The project has no code coverage. Will not display blockers as blockers depend on code coverage.

Fuzzer: fuzz/fuzz_json.c

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The project has no code coverage. Will not display blockers as blockers depend on code coverage.

Fuzzer: fuzz/fuzz_regexp_compile.c

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The project has no code coverage. Will not display blockers as blockers depend on code coverage.

Fuzzer: fuzz/fuzz_compile.c

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The project has no code coverage. Will not display blockers as blockers depend on code coverage.

Fuzzer: fuzz/fuzz_bytecode.c

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The project has no code coverage. Will not display blockers as blockers depend on code coverage.

Analyses and suggestions

Optimal target analysis

Remaining optimal interesting functions

The following table shows a list of functions that are optimal targets. Optimal targets are identified by finding the functions that in combination, yield a high code coverage.

Func name Functions filename Arg count Args Function depth hitcount instr count bb count cyclomatic complexity Reachable functions Incoming references total cyclomatic complexity Unreached complexity
__JS_EvalInternal /src/quickjs/quickjs.c 7 ['JSContext*', 'JSValueConst', 'char*', 'size_t', 'char*', 'int', 'int'] 191 0 97 18 23 905 0 6739 3543
js_duration_round /src/quickjs/temporal/duration.c 4 ['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] 163 0 573 123 169 766 0 4904 2099
js_datetimeformat_formatRangeToParts /src/quickjs/intl/datetimeformat.c 4 ['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] 162 0 341 73 139 719 0 3872 978
js_datetimeformat_format_date /src/quickjs/intl/datetimeformat.c 4 ['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] 164 0 17 4 3 666 0 3715 872
js_relativetimeformat_formatToParts /src/quickjs/intl/relativetimeformat.c 4 ['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] 167 0 105 24 28 678 0 3506 686
js_locale_constructor /src/quickjs/intl/locale.c 4 ['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] 160 0 80 15 22 652 0 3661 403
run_test_dir_list /src/quickjs/run-test262.c 1 ['void*'] 187 0 18 5 6 781 0 3466 377

Implementing fuzzers that target the above functions will improve reachability such that it becomes:

Functions statically reachable by fuzzers
47.0%
1512 / 3222
Cyclomatic complexity statically reachable by fuzzers
51.0%
14132 / 27811

All functions overview

If you implement fuzzers for these functions, the status of all functions in the project will be:

Func name Functions filename Args Function call depth Reached by Fuzzers Runtime reached by Fuzzers Combined reached by Fuzzers Fuzzers runtime hit Func lines hit % I Count BB Count Cyclomatic complexity Functions reached Reached by functions Accumulated cyclomatic complexity Undiscovered complexity

Fuzz driver synthesis

New fuzzers

The below fuzzers are templates and suggestions for how to target the set of optimal functions above

quickjs.c

Target file: /src/quickjs/quickjs.c
Target functions: __JS_EvalInternal
#include "ada_fuzz_header.h"

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  af_safe_gb_init(data, size);

  /* target __JS_EvalInternal */
  UNKNOWN_TYPE unknown_0;
  UNKNOWN_TYPE unknown_1;
  char *new_var2 = ada_safe_get_char_p();
  UNKNOWN_TYPE unknown_3;
  char *new_var4 = ada_safe_get_char_p();
  int new_var5 = ada_safe_get_int();
  int new_var6 = ada_safe_get_int();
  __JS_EvalInternal(unknown_0, unknown_1, new_var2, unknown_3, new_var4, new_var5, new_var6);

  af_safe_gb_cleanup();
}

duration.c

Target file: /src/quickjs/temporal/duration.c
Target functions: js_duration_round
#include "ada_fuzz_header.h"

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  af_safe_gb_init(data, size);

  /* target js_duration_round */
  UNKNOWN_TYPE unknown_7;
  UNKNOWN_TYPE unknown_8;
  int new_var9 = ada_safe_get_int();
  UNKNOWN_TYPE unknown_10;
  js_duration_round(unknown_7, unknown_8, new_var9, unknown_10);

  af_safe_gb_cleanup();
}

datetimeformat.c

Target file: /src/quickjs/intl/datetimeformat.c
Target functions: js_datetimeformat_formatRangeToParts, js_datetimeformat_format_date
#include "ada_fuzz_header.h"

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  af_safe_gb_init(data, size);

  /* target js_datetimeformat_formatRangeToParts */
  UNKNOWN_TYPE unknown_11;
  UNKNOWN_TYPE unknown_12;
  int new_var13 = ada_safe_get_int();
  UNKNOWN_TYPE unknown_14;
  js_datetimeformat_formatRangeToParts(unknown_11, unknown_12, new_var13, unknown_14);

  /* target js_datetimeformat_format_date */
  UNKNOWN_TYPE unknown_15;
  UNKNOWN_TYPE unknown_16;
  int new_var17 = ada_safe_get_int();
  UNKNOWN_TYPE unknown_18;
  js_datetimeformat_format_date(unknown_15, unknown_16, new_var17, unknown_18);

  af_safe_gb_cleanup();
}

relativetimeformat.c

Target file: /src/quickjs/intl/relativetimeformat.c
Target functions: js_relativetimeformat_formatToParts
#include "ada_fuzz_header.h"

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  af_safe_gb_init(data, size);

  /* target js_relativetimeformat_formatToParts */
  UNKNOWN_TYPE unknown_19;
  UNKNOWN_TYPE unknown_20;
  int new_var21 = ada_safe_get_int();
  UNKNOWN_TYPE unknown_22;
  js_relativetimeformat_formatToParts(unknown_19, unknown_20, new_var21, unknown_22);

  af_safe_gb_cleanup();
}

locale.c

Target file: /src/quickjs/intl/locale.c
Target functions: js_locale_constructor
#include "ada_fuzz_header.h"

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  af_safe_gb_init(data, size);

  /* target js_locale_constructor */
  UNKNOWN_TYPE unknown_23;
  UNKNOWN_TYPE unknown_24;
  int new_var25 = ada_safe_get_int();
  UNKNOWN_TYPE unknown_26;
  js_locale_constructor(unknown_23, unknown_24, new_var25, unknown_26);

  af_safe_gb_cleanup();
}

run-test262.c

Target file: /src/quickjs/run-test262.c
Target functions: run_test_dir_list
#include "ada_fuzz_header.h"

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  af_safe_gb_init(data, size);

  /* target run_test_dir_list */
  UNKNOWN_TYPE unknown_27;
  run_test_dir_list(unknown_27);

  af_safe_gb_cleanup();
}

Files and Directories in report

This section shows which files and directories are considered in this report. The main reason for showing this is fuzz introspector may include more code in the reasoning than is desired. This section helps identify if too many files/directories are included, e.g. third party code, which may be irrelevant for the threat model. In the event too much is included, fuzz introspector supports a configuration file that can exclude data from the report. See the following link for more information on how to create a config file: link

Files in report

Source file Reached by Covered by
/src/quickjs/temporal/calendar.c [] []
/src/quickjs/intl/intl.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/libunicode.h ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/intl/collator.c [] []
/src/quickjs/cutils.h ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/temporal/timezone.c [] []
/src/quickjs/fuzz/fuzz_regexp_compile.c ['fuzz/fuzz_regexp_compile.c'] []
/src/quickjs/intl/datetimeformat.c [] []
/src/quickjs/temporal/temporal.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/dtoa.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/quickjs-opcode.h [] []
/src/quickjs/temporal/plaindatetime.c [] []
/src/quickjs/fuzz/fuzz_common.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_compile.c'] []
/src/quickjs/fuzz/fuzz_json.c ['fuzz/fuzz_json.c'] []
/src/quickjs/libunicode.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/run-test262.c [] []
/src/quickjs/temporal/now.c [] []
/src/quickjs/intl/displaynames.c [] []
/src/quickjs/cutils.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/qjs.c [] []
/src/quickjs/compat/test-closefrom.c [] []
/src/quickjs/temporal/instant.c [] []
/src/quickjs/fuzz/fuzz_eval.c ['fuzz/fuzz_eval.c'] []
/src/quickjs/temporal/plaindate.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/examples/point.c [] []
/src/quickjs/temporal/plainyearmonth.c [] []
/src/quickjs/intl/pluralrules.c [] []
/src/quickjs/intl/durationformat.c [] []
/src/quickjs/quickjs.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/fuzz/fuzz_compile.c ['fuzz/fuzz_compile.c'] []
/src/quickjs/examples/fib.c [] []
/src/quickjs/quickjs.h ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/intl/relativetimeformat.c [] []
/src/quickjs/fuzz/fuzz_regexp.c ['fuzz/fuzz_regexp.c'] []
/src/quickjs/list.h ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/temporal/plaintime.c [] []
/src/quickjs/qjsc.c [] []
/src/quickjs/temporal/temporal_private.h [] []
/src/quickjs/intl/segmenter.c [] []
/src/quickjs/fuzz/fuzz_bytecode.c ['fuzz/fuzz_bytecode.c'] []
/src/quickjs/intl/numberformat.c [] []
/src/quickjs/libregexp.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_module_export.c', 'fuzz/fuzz_regexp.c', 'fuzz/fuzz_json.c', 'fuzz/fuzz_regexp_compile.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/fuzz/fuzz_module_export.c ['fuzz/fuzz_module_export.c'] []
/src/quickjs/intl/intl_private.h [] []
/src/quickjs/temporal/duration.c [] []
/src/quickjs/intl/listformat.c [] []
/src/quickjs/temporal/plainmonthday.c [] []
/src/quickjs/unicode_gen.c ['fuzz/fuzz_regexp.c'] []
/src/quickjs/tests/bjson.c [] []
/src/quickjs/temporal/zoneddatetime.c [] []
/src/quickjs/quickjs-libc.c ['fuzz/fuzz_eval.c', 'fuzz/fuzz_compile.c', 'fuzz/fuzz_bytecode.c'] []
/src/quickjs/intl/locale.c [] []

Directories in report

Directory
/src/quickjs/intl/
/src/quickjs/temporal/
/src/quickjs/examples/
/src/quickjs/
/src/quickjs/tests/
/src/quickjs/compat/
/src/quickjs/fuzz/

Sink analyser for CWEs

This section contains multiple tables, each table contains a list of sink functions/methods found in the project for one of the CWE supported by the sink analyser, together with information like which fuzzers statically reach the sink functions/methods and possible call path to that sink functions/methods if it is not statically reached by any fuzzers. Column 1 is the function/method name of the sink functions/methods found in the project. Column 2 lists all fuzzers (or no fuzzers at all) that have covered that particular function method statically. Column 3 shows a list of possible call paths to reach the specific function/method call if none of the fuzzers cover the target function/method calls. Lastly, column 4 shows possible fuzzer blockers that prevent an existing fuzzer from reaching the target sink functions/methods dynamically.

Sink functions/methods found for CWE787

Target sink Reached by fuzzer Function call path Possible branch blockers
malloc ['/src/quickjs/fuzz/fuzz_module_export.c', '/src/quickjs/fuzz/fuzz_json.c', '/src/quickjs/fuzz/fuzz_compile.c', '/src/quickjs/fuzz/fuzz_regexp_compile.c', '/src/quickjs/fuzz/fuzz_eval.c', '/src/quickjs/fuzz/fuzz_bytecode.c'] N/A
Blocker function Arguments type Return type Constants touched
js_def_realloc
in /src/quickjs/quickjs.c:2217
['JSMallocState*', 'void*', 'size_t'] void []
js_trace_malloc_init
in /src/quickjs/qjs.c:202
['struct trace_malloc_data*'] void []
js_trace_realloc
in /src/quickjs/qjs.c:236
['JSMallocState*', 'void*', 'size_t'] void []
run_test_dir_list
in /src/quickjs/run-test262.c:2274
['void*'] void []
load_config
in /src/quickjs/run-test262.c:1160
['char*', 'char*'] void []
namelist_add_from_error_file
in /src/quickjs/run-test262.c:476
['namelist_t*', 'char*'] void []
jsc_module_loader
in /src/quickjs/qjsc.c:242
['JSContext*', 'char*', 'void*', 'JSValueConst'] JSModuleDef []
compile_file
in /src/quickjs/qjsc.c:352
['JSContext*', 'FILE*', 'char*', 'char*', 'int'] void []
add_test_file
in /src/quickjs/run-test262.c:500
['char*', 'struct stat*', 'int'] int []
update_exclude_dirs
in /src/quickjs/run-test262.c:1120
[] void []
js_agent_start
in /src/quickjs/run-test262.c:697
['JSContext*', 'JSValue', 'int', 'JSValue*'] JSValue []
js_agent_report
in /src/quickjs/run-test262.c:868
['JSContext*', 'JSValue', 'int', 'JSValue*'] JSValue []
run_test262_harness_test
in /src/quickjs/run-test262.c:2118
['ThreadLocalStorage*', 'char*', 'BOOL', 'BOOL'] int []
js_module_loader_test
in /src/quickjs/run-test262.c:1009
['JSContext*', 'char*', 'void*', 'JSValueConst'] JSModuleDef []
js_loadScript
in /src/quickjs/quickjs-libc.c:444
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_std_loadFile
in /src/quickjs/quickjs-libc.c:469
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_module_loader
in /src/quickjs/quickjs-libc.c:695
['JSContext*', 'char*', 'void*', 'JSValueConst'] JSModuleDef []
js_std_unsetenv
in /src/quickjs/quickjs-libc.c:836
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_std_setenv
in /src/quickjs/quickjs-libc.c:818
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_sab_alloc
in /src/quickjs/quickjs-libc.c:3578
['void*', 'size_t'] void []
js_worker_ctor
in /src/quickjs/quickjs-libc.c:3787
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_worker_postMessage
in /src/quickjs/quickjs-libc.c:3870
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
worker_func
in /src/quickjs/quickjs-libc.c:3704
['void*'] void []
test_one_input_init
in /src/quickjs/fuzz/fuzz_common.c:31
['JSRuntime*', 'JSContext*'] void []
js_std_promise_rejection_tracker
in /src/quickjs/quickjs-libc.c:4343
['JSContext*', 'JSValueConst', 'JSValueConst', 'BOOL', 'void*'] void []
build_decompose_table
in /src/quickjs/unicode_gen.c:3309
['FILE*'] void []
parse_script_extensions
in /src/quickjs/unicode_gen.c:1120
['char*'] void []
dump_case_folding_special_cases
in /src/quickjs/unicode_gen.c:1722
['CCInfo*'] void []
realloc ['/src/quickjs/fuzz/fuzz_regexp.c'] N/A
Blocker function Arguments type Return type Constants touched
cr_default_realloc
in /src/quickjs/libunicode.c:395
['void*', 'void*', 'size_t'] void []
js_def_realloc
in /src/quickjs/quickjs.c:2217
['JSMallocState*', 'void*', 'size_t'] void []
js_regexp_constructor
in /src/quickjs/quickjs.c:50537
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_regexp_compile
in /src/quickjs/quickjs.c:50620
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
parse_sequence_prop_list
in /src/quickjs/unicode_gen.c:992
['char*'] void []
seq_prop_cb
in /src/quickjs/libregexp.c:863
['void*', 'uint32_t*', 'int'] void []
build_sequence_prop_list_table
in /src/quickjs/unicode_gen.c:2442
['FILE*'] void []
lre_bytecode_realloc
in /src/quickjs/libregexp.c:2507
['void*', 'void*', 'size_t'] void []
stack_realloc
in /src/quickjs/libregexp.c:2750
['REExecContext*', 'size_t'] no_inline []
js_regexp_test
in /src/quickjs/quickjs.c:51273
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_regexp_Symbol_match
in /src/quickjs/quickjs.c:51287
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_regexp_string_iterator_next
in /src/quickjs/quickjs.c:51400
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*', 'BOOL*', 'int'] JSValue []
js_regexp_Symbol_replace
in /src/quickjs/quickjs.c:51657
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_regexp_Symbol_search
in /src/quickjs/quickjs.c:51851
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_regexp_Symbol_split
in /src/quickjs/quickjs.c:51909
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_trace_realloc
in /src/quickjs/qjs.c:236
['JSMallocState*', 'void*', 'size_t'] void []
dbuf_default_realloc
in /src/quickjs/cutils.c:84
['void*', 'void*', 'size_t'] void []
jsc_module_loader
in /src/quickjs/qjsc.c:242
['JSContext*', 'char*', 'void*', 'JSValueConst'] JSModuleDef []
compile_file
in /src/quickjs/qjsc.c:352
['JSContext*', 'FILE*', 'char*', 'char*', 'int'] void []
load_config
in /src/quickjs/run-test262.c:1160
['char*', 'char*'] void []
namelist_add_from_error_file
in /src/quickjs/run-test262.c:476
['namelist_t*', 'char*'] void []
add_test_file
in /src/quickjs/run-test262.c:500
['char*', 'struct stat*', 'int'] int []
update_exclude_dirs
in /src/quickjs/run-test262.c:1120
[] void []
run_test_dir_list
in /src/quickjs/run-test262.c:2274
['void*'] void []
js_os_poll
in /src/quickjs/quickjs-libc.c:2623
['JSContext*'] int []
normalization_test
in /src/quickjs/unicode_gen.c:3608
['char*'] void []
parse_unicode_data
in /src/quickjs/unicode_gen.c:463
['char*'] void []

Sink functions/methods found for CWE416

Target sink Reached by fuzzer Function call path Possible branch blockers
free ['/src/quickjs/fuzz/fuzz_module_export.c', '/src/quickjs/fuzz/fuzz_json.c', '/src/quickjs/fuzz/fuzz_compile.c', '/src/quickjs/fuzz/fuzz_regexp_compile.c', '/src/quickjs/fuzz/fuzz_regexp.c', '/src/quickjs/fuzz/fuzz_eval.c', '/src/quickjs/fuzz/fuzz_bytecode.c'] N/A
Blocker function Arguments type Return type Constants touched
js_def_free
in /src/quickjs/quickjs.c:2207
['JSMallocState*', 'void*'] void []
js_def_realloc
in /src/quickjs/quickjs.c:2217
['JSMallocState*', 'void*', 'size_t'] void []
run_test_dir_list
in /src/quickjs/run-test262.c:2274
['void*'] void []
js_trace_malloc_init
in /src/quickjs/qjs.c:202
['struct trace_malloc_data*'] void []
js_trace_free
in /src/quickjs/qjs.c:225
['JSMallocState*', 'void*'] void []
js_trace_realloc
in /src/quickjs/qjs.c:236
['JSMallocState*', 'void*', 'size_t'] void []
load_config
in /src/quickjs/run-test262.c:1160
['char*', 'char*'] void []
update_exclude_dirs
in /src/quickjs/run-test262.c:1120
[] void []
namelist_add_from_error_file
in /src/quickjs/run-test262.c:476
['namelist_t*', 'char*'] void []
agent_start
in /src/quickjs/run-test262.c:614
['void*'] void []
run_test262_harness_test
in /src/quickjs/run-test262.c:2118
['ThreadLocalStorage*', 'char*', 'BOOL', 'BOOL'] int []
js_agent_getReport
in /src/quickjs/run-test262.c:843
['JSContext*', 'JSValue', 'int', 'JSValue*'] JSValue []
jsc_module_loader
in /src/quickjs/qjsc.c:242
['JSContext*', 'char*', 'void*', 'JSValueConst'] JSModuleDef []
compile_file
in /src/quickjs/qjsc.c:352
['JSContext*', 'FILE*', 'char*', 'char*', 'int'] void []
js_module_loader_test
in /src/quickjs/run-test262.c:1009
['JSContext*', 'char*', 'void*', 'JSValueConst'] JSModuleDef []
js_loadScript
in /src/quickjs/quickjs-libc.c:444
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_std_loadFile
in /src/quickjs/quickjs-libc.c:469
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_module_loader
in /src/quickjs/quickjs-libc.c:695
['JSContext*', 'char*', 'void*', 'JSValueConst'] JSModuleDef []
js_std_unsetenv
in /src/quickjs/quickjs-libc.c:836
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_std_setenv
in /src/quickjs/quickjs-libc.c:818
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_worker_finalizer
in /src/quickjs/quickjs-libc.c:3675
['JSRuntime*', 'JSValue'] void []
js_worker_set_onmessage
in /src/quickjs/quickjs-libc.c:3938
['JSContext*', 'JSValueConst', 'JSValueConst'] JSValue []
js_worker_ctor
in /src/quickjs/quickjs-libc.c:3787
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
worker_func
in /src/quickjs/quickjs-libc.c:3704
['void*'] void []
js_worker_postMessage
in /src/quickjs/quickjs-libc.c:3870
['JSContext*', 'JSValueConst', 'int', 'JSValueConst*'] JSValue []
js_std_promise_rejection_tracker
in /src/quickjs/quickjs-libc.c:4343
['JSContext*', 'JSValueConst', 'JSValueConst', 'BOOL', 'void*'] void []
dump_case_folding_special_cases
in /src/quickjs/unicode_gen.c:1722
['CCInfo*'] void []
build_decompose_table
in /src/quickjs/unicode_gen.c:3309
['FILE*'] void []
normalization_test
in /src/quickjs/unicode_gen.c:3608
['char*'] void []