Reproof

100 public bugs

Reproof ran 100 real OSS-Fuzz crashes from ARVO through the vulnerable and the fixed build in Nebius sandboxes: 10 from the earlier 10-bug evaluation and 90 drawn at random by a rule committed before any of them ran. Of the 100:

  • 55crashed on the vulnerable build, as ARVO says they should
  • 55ran clean on the fixed build
  • 42matched the crash state OSV recorded
  • 43had a report claim that matched the measured crash

$0.32 for all 100, about $0.0032 a bug, model and sandboxes together. 38 tasks did not run (the Nebius sandbox API answered HTTP 500) and still count against the 100.

Two runs

Run 1 lost its last tasks to a dropped model connection. Before run 2 started, a plan was committed saying what would change, that run 2 would be published whatever it showed, and that there would be no run 3. Run 2 then hit a different failure, and those tasks count against it too.

42 tasks completed in both runs. All 42 got the same verdict both times.

Run 1

October 20, 00:37 to 01:15 ET

50 of 100 completed

  • 49 tasks: Lost the connection to Token Factory twice
  • 1 task: Sandbox output could not be decoded
Read eval/results/eval100.json
How the 100 were picked

The 10-task historical convenience sample plus 90 prepared tasks from the pinned ARVO population in random.Random(20261019) draw order, with a 1,500,000,000-byte per-image cap and a three-task combined project cap. Prepare failures are recorded and the draw continues. Every prepared task remains in the run denominator.

1 drawn bug failed to prepare (ARVO 42487077, rnp, slice_exception), and the draw went on, as registered.

Can Nemotron write the fix? An offline test

For the 10 historical bugs, Nemotron 3 Super got the report, the sanitizer output and the source around the crash, and wrote exact-text edits. Each edit was applied inside the bug's ARVO image, the project was rebuilt with arvo compile, and the stored input was run again, with up to 3 attempts and the build error or the new crash sent back each time. Code decided the result, by a rule committed before each run. Run 2 is run 1 with the harness defect below fixed; both are shown as recorded.

Every patch here was proposed and proven offline, in a local Docker container that was deleted afterwards. None was applied upstream, filed, or sent to a project.

Run 1

October 21, 15:21 to 15:42 UTC. Every attempt rebuilt in the container that had already run the control build.

2 of 10 bugs got a patch that rebuilt and no longer crashed on the stored input.

29 model calls. Proven on attempt 2 and 3 of 3. $0.0731 on Token Factory for all 10, against a $3 cap.

2 proven, 8 not proven. Proven: jq ARVO 42530604 on attempt 2; libplist ARVO 42508390 on attempt 3.

Found during the run: 12 of the 29 attempts never tested their edit. In 5 images the build script makes a directory with plain mkdir, so its second run in one container stops, and the harness had already run it once as a control. Those tasks still count as not proven in run 1, under its registered rule. Only 8 attempts, in 4 tasks, built an edit; 2 of them were proven. Read the notes

Rule committed in bc162af before the run. Read the rule

Run 2

October 21, 16:32 to 16:52 UTC. Every attempt rebuilt in a fresh container from a snapshot taken before the control build.

2 of 10 bugs got a patch that rebuilt and no longer crashed on the stored input.

28 model calls. Proven on attempt 3 and 1 of 3. $0.0914 on Token Factory for all 10, against a $3 cap.

2 proven, 8 not proven. Proven: libplist ARVO 42507851 on attempt 3; libplist ARVO 42508390 on attempt 1.

No attempt stopped at a build script's plain mkdir. 14 of the 28 attempts, in 7 tasks, built an edit. Read the notes

Rule committed in bbe6e9a before the run. Read the rule

  1. ARVO 42530604jqHeap-buffer-overflow WRITE 1

    Run 1PROVEN

    1: edit did not apply · 2: proven

    2 of 3 calls · $0.00598 · Run 1 card

    What the edit does: Makes the buffer for a number's text in jv.c bigger: digits + 14 bytes becomes digits + 25. The upstream fix made it digits + 15.

    Run 1: the edit Nemotron wrote

    Nemotron's reason: The previous attempt failed because the exact text to replace was not found in the provided source. Upon re-examining the source block for `/src/jq/src/jv.c`, the correct location of the allocation for `literal_data` is within the function `jvp_literal_number_literal`. The code there allocates memory using `jvp_dec_number_ptr(n)->digits + 14`, which is insufficient for large exponents, causing a heap buffer overflow in `decToString`. The fix increases this allocation size to `digits + 25` to safely accommodate the worst-case output of `decNumberToString`, including space for the exponent (up to 10 digits), sign, 'E', and null terminator.

    --- a/src/jq/src/jv.c
    +++ b/src/jq/src/jv.c
    @@ -644,7 +644,7 @@
       }
     
       if (plit->literal_data == NULL) {
    -    int len = jvp_dec_number_ptr(n)->digits + 14;
    +    int len = jvp_dec_number_ptr(n)->digits + 25;
         plit->literal_data = jv_mem_alloc(len);
     
         // Preserve the actual precision as we have parsed it
    

    Checked by: PoC only: the image has no seed corpus.

    Compare with the upstream fix, 71c2ab5. Proven means it rebuilt and stopped the crash, not that it is the upstream fix or safe to merge.

    Run 2NOT PROVEN

    1: no usable reply · 2: edit did not apply · 3: edit did not apply

    3 of 3 calls · $0.01460 · Run 2 card

  2. ARVO 42507851libplistHeap-buffer-overflow READ 2

    Run 1NOT PROVEN

    1: still crashed · 2: still crashed · 3: edit did not apply

    3 of 3 calls · $0.00797 · Run 1 card

    Run 2PROVEN

    1: still crashed · 2: seed corpus failed · 3: proven

    3 of 3 calls · $0.00722 · Run 2 card

    What the edit does: Copies the number into a new buffer that ends in a NUL byte and runs strtol and the float checks on the copy, so parsing stops at the end of the token. Floats still go to atof on the original text.

    Run 2: the edit Nemotron wrote

    Nemotron's reason: The previous fix introduced a use-after-free because it freed the temporary buffer before using `endp` in the subsequent checks. The variable `endp` is a pointer into the temporarily allocated buffer, so freeing the buffer before checking `endp` leads to undefined behavior when `endp` is later dereferenced. The fix is to delay the free of the temporary buffer until after all uses of `endp` are complete. We will allocate a null-terminated copy of the string, use it for `strtol`, and then free it only after we have finished using `endp` for any further checks (such as the float detection logic).

    --- a/src/libplist/src/jplist.c
    +++ b/src/libplist/src/jplist.c
    @@ -437,16 +437,23 @@
             data->type = PLIST_NULL;
             val = plist_new_node(data);
         } else if (str_val[0] == '-' || isdigit(str_val[0])) {
    +        char* buf = malloc(str_len + 1);
    +        if (!buf) {
    +            PLIST_JSON_ERR("%s: Out of memory\n", __func__);
    +            return NULL;
    +        }
    +        memcpy(buf, str_val, str_len);
    +        buf[str_len] = '\0';
             char* endp = NULL;
    -        long long intpart = strtol(str_val, &endp, 10);
    -        if (endp >= str_end) {
    +        long long intpart = strtol(buf, &endp, 10);
    +        if (endp >= buf + str_len) {
                 /* integer */
                 val = plist_new_uint((uint64_t)intpart);
    -        } else if (*endp == '.' && endp+1 < str_end && isdigit(*(endp+1))) {
    +        } else if (*endp == '.' && endp+1 < buf + str_len && isdigit(*(endp+1))) {
                 /* float */
                 char* fendp = endp+1;
    -            while (isdigit(*fendp) && fendp < str_end) fendp++;
    -            if ((fendp > endp+1 && fendp >= str_end) || (fendp+2 < str_end && (*fendp == 'e' || *fendp == 'E') && (*(fendp+1) == '+' || *(fendp+1) == '-') && isdigit(*(fendp+2)))) {
    +            while (isdigit(*fendp) && fendp < buf + str_len) fendp++;
    +            if ((fendp > endp+1 && fendp >= buf + str_len) || (fendp+2 < buf + str_len && (*fendp == 'e' || *fendp == 'E') && (*(fendp+1) == '+' || *(fendp+1) == '-') && isdigit(*(fendp+2)))) {
                     double dval = atof(str_val);
                     val = plist_new_real(dval);
                 } else {
    @@ -455,6 +462,7 @@
             } else {
                 PLIST_JSON_ERR("%s: invalid character at offset %d when parsing numerical value\n", __func__, (int)(endp - js));
             }
    +        free(buf);
         } else {
             PLIST_JSON_ERR("%s: invalid primitive value '%.*s' encountered\n", __func__, (int)str_len, str_val);
         }
    

    Checked by: seed corpus, 2 files.

    Compare with the upstream fix, 8ea84ca. Proven means it rebuilt and stopped the crash, not that it is the upstream fix or safe to merge.

  3. ARVO 42496387wasm3Heap-use-after-free READ 8

    Run 1NOT PROVEN

    1: build failed · 2: build failed · 3: build failed

    3 of 3 calls · $0.00645 · Run 1 card

    Attempts 1, 2 and 3 never tested the edit: the build script stopped at "mkdir: cannot create directory 'build': File exists" because the control build had already run it.

    Run 2NOT PROVEN

    1: still crashed · 2: no usable reply · 3: still crashed

    3 of 3 calls · $0.01199 · Run 2 card

  4. ARVO 42508524libplistHeap-buffer-overflow READ 1

    Run 1NOT PROVEN

    1: still crashed · 2: still crashed · 3: still crashed

    3 of 3 calls · $0.00554 · Run 1 card

    Run 2NOT PROVEN

    1: edit did not apply · 2: edit did not apply · 3: still crashed

    3 of 3 calls · $0.00910 · Run 2 card

  5. ARVO 42536108minizHeap-buffer-overflow READ (any size)

    Run 1NOT PROVEN

    1: edit did not apply · 2: build failed · 3: build failed

    3 of 3 calls · $0.00619 · Run 1 card

    Attempts 2 and 3 never tested the edit: the build script stopped at "mkdir: cannot create directory 'build': File exists" because the control build had already run it.

    Run 2NOT PROVEN

    1: edit did not apply · 2: still crashed · 3: no usable reply

    3 of 3 calls · $0.00964 · Run 2 card

  6. ARVO 42536112minizHeap-buffer-overflow READ (any size)

    Run 1NOT PROVEN

    1: build failed · 2: no usable reply · 3: build failed

    3 of 3 calls · $0.01059 · Run 1 card

    Attempts 1 and 3 never tested the edit: the build script stopped at "mkdir: cannot create directory 'build': File exists" because the control build had already run it.

    Run 2NOT PROVEN

    1: edit did not apply · 2: no usable reply · 3: edit did not apply

    3 of 3 calls · $0.01018 · Run 2 card

  7. ARVO 42508390libplistHeap-buffer-overflow READ 2

    Run 1PROVEN

    1: still crashed · 2: build failed · 3: proven

    3 of 3 calls · $0.00808 · Run 1 card

    What the edit does: Rewrites the JSON number parser in jplist.c by hand, reading digits in a loop that stops at the end of the token instead of calling strtol. Floats still go to atof.

    Run 1: the edit Nemotron wrote

    Nemotron's reason: The previous attempt had syntax errors due to incorrect JSON structure in the edit description, particularly mismatched quotes and braces. The fix must be applied cleanly within the existing function without introducing control-flow errors. We now provide a corrected version that replaces only the unsafe numeric parsing block with a safe, bounds-aware implementation using manual digit parsing, while preserving the original function structure and avoiding any use of `break` outside loops/switches.

    --- a/src/libplist/src/jplist.c
    +++ b/src/libplist/src/jplist.c
    @@ -437,23 +437,77 @@
             data->type = PLIST_NULL;
             val = plist_new_node(data);
         } else if (str_val[0] == '-' || isdigit(str_val[0])) {
    -        char* endp = NULL;
    -        long long intpart = strtol(str_val, &endp, 10);
    -        if (endp >= str_end) {
    -            /* integer */
    -            val = plist_new_uint((uint64_t)intpart);
    -        } else if (*endp == '.' && endp+1 < str_end && isdigit(*(endp+1))) {
    -            /* float */
    -            char* fendp = endp+1;
    -            while (isdigit(*fendp) && fendp < str_end) fendp++;
    -            if ((fendp > endp+1 && fendp >= str_end) || (fendp+2 < str_end && (*fendp == 'e' || *fendp == 'E') && (*(fendp+1) == '+' || *(fendp+1) == '-') && isdigit(*(fendp+2)))) {
    -                double dval = atof(str_val);
    -                val = plist_new_real(dval);
    +        const char* p = str_val;
    +        int neg = 0;
    +        if (*p == '-') {
    +            neg = 1;
    +            p++;
    +            if (p >= str_end) {
    +                PLIST_JSON_ERR("%s: invalid number (minus without digits)\n", __func__);
                 } else {
    -                PLIST_JSON_ERR("%s: invalid character at offset %d when parsing floating point value\n", __func__, (int)(fendp - js));
    +                if (!isdigit(*p)) {
    +                    PLIST_JSON_ERR("%s: invalid number (expected digit after minus)\n", __func__);
    +                } else {
    +                    long long intpart = 0;
    +                    while (p < str_end && isdigit(*p)) {
    +                        intpart = intpart * 10 + (*p - '0');
    +                        p++;
    +                    }
    +                    if (p >= str_end) {
    +                        if (neg) intpart = -intpart;
    +                        val = plist_new_uint((uint64_t)intpart);
    +                    } else if (*p == '.' && p+1 < str_end && isdigit(*(p+1))) {
    +                        p++;
    +                        while (p < str_end && isdigit(*p)) p++;
    +                        if (p < str_end && (*p == 'e' || *p == 'E')) {
    +                            p++;
    +                            if (p < str_end && (*p == '+' || *p == '-')) p++;
    +                            if (p < str_end && isdigit(*p)) {
    +                                while (p < str_end && isdigit(*p)) p++;
    +                            } else {
    +                                PLIST_JSON_ERR("%s: invalid exponent in float\n", __func__);
    +                            }
    +                        }
    +                        if (p >= str_end) {
    +                            double dval = atof(str_val);
    +                            val = plist_new_real(dval);
    +                        } else {
    +                            PLIST_JSON_ERR("%s: invalid character at offset %d when parsing float\n", __func__, (int)(p - js));
    +                        }
    +                    } else {
    +                        PLIST_JSON_ERR("%s: invalid character at offset %d when parsing number\n", __func__, (int)(p - js));
    +                    }
    +                }
                 }
             } else {
    -            PLIST_JSON_ERR("%s: invalid character at offset %d when parsing numerical value\n", __func__, (int)(endp - js));
    +            long long intpart = 0;
    +            while (p < str_end && isdigit(*p)) {
    +                intpart = intpart * 10 + (*p - '0');
    +                p++;
    +            }
    +            if (p >= str_end) {
    +                val = plist_new_uint((uint64_t)intpart);
    +            } else if (*p == '.' && p+1 < str_end && isdigit(*(p+1))) {
    +                p++;
    +                while (p < str_end && isdigit(*p)) p++;
    +                if (p < str_end && (*p == 'e' || *p == 'E')) {
    +                    p++;
    +                    if (p < str_end && (*p == '+' || *p == '-')) p++;
    +                    if (p < str_end && isdigit(*p)) {
    +                        while (p < str_end && isdigit(*p)) p++;
    +                    } else {
    +                        PLIST_JSON_ERR("%s: invalid exponent in float\n", __func__);
    +                    }
    +                }
    +                if (p >= str_end) {
    +                    double dval = atof(str_val);
    +                    val = plist_new_real(dval);
    +                } else {
    +                    PLIST_JSON_ERR("%s: invalid character at offset %d when parsing float\n", __func__, (int)(p - js));
    +                }
    +            } else {
    +                PLIST_JSON_ERR("%s: invalid character at offset %d when parsing number\n", __func__, (int)(p - js));
    +            }
             }
         } else {
             PLIST_JSON_ERR("%s: invalid primitive value '%.*s' encountered\n", __func__, (int)str_len, str_val);
    

    Checked by: seed corpus, 2 files.

    Compare with the upstream fix, 7d2cdc6. Proven means it rebuilt and stopped the crash, not that it is the upstream fix or safe to merge.

    Run 2PROVEN

    1: proven

    1 of 3 calls · $0.00184 · Run 2 card

    What the edit does: Rejects a number that is a lone minus sign, or a minus sign not followed by a digit, before strtol runs. The rest of the parser is unchanged, only indented one level deeper.

    Run 2: the edit Nemotron wrote

    Nemotron's reason: The issue occurs because `strtol` reads beyond the bounds of the allocated string when processing numeric primitives. Specifically, when `strtol` parses a number like `-`, it may read past the null terminator into adjacent memory due to insufficient validation before calling `strtol`. The fix adds a check to ensure there is at least one digit following a minus sign before attempting conversion.

    --- a/src/libplist/src/jplist.c
    +++ b/src/libplist/src/jplist.c
    @@ -437,23 +437,31 @@
             data->type = PLIST_NULL;
             val = plist_new_node(data);
         } else if (str_val[0] == '-' || isdigit(str_val[0])) {
    -        char* endp = NULL;
    -        long long intpart = strtol(str_val, &endp, 10);
    -        if (endp >= str_end) {
    -            /* integer */
    -            val = plist_new_uint((uint64_t)intpart);
    -        } else if (*endp == '.' && endp+1 < str_end && isdigit(*(endp+1))) {
    -            /* float */
    -            char* fendp = endp+1;
    -            while (isdigit(*fendp) && fendp < str_end) fendp++;
    -            if ((fendp > endp+1 && fendp >= str_end) || (fendp+2 < str_end && (*fendp == 'e' || *fendp == 'E') && (*(fendp+1) == '+' || *(fendp+1) == '-') && isdigit(*(fendp+2)))) {
    -                double dval = atof(str_val);
    -                val = plist_new_real(dval);
    +        /* Ensure we have at least one digit after optional minus sign */
    +        if (str_val[0] == '-' && (str_end - str_val < 2 || !isdigit(str_val[1])))
    +        {
    +            PLIST_JSON_ERR("%s: invalid primitive value '%.*s' encountered\n", __func__, (int)str_len, str_val);
    +        }
    +        else
    +        {
    +            char* endp = NULL;
    +            long long intpart = strtol(str_val, &endp, 10);
    +            if (endp >= str_end) {
    +                /* integer */
    +                val = plist_new_uint((uint64_t)intpart);
    +            } else if (*endp == '.' && endp+1 < str_end && isdigit(*(endp+1))) {
    +                /* float */
    +                char* fendp = endp+1;
    +                while (isdigit(*fendp) && fendp < str_end) fendp++;
    +                if ((fendp > endp+1 && fendp >= str_end) || (fendp+2 < str_end && (*fendp == 'e' || *fendp == 'E') && (*(fendp+1) == '+' || *(fendp+1) == '-') && isdigit(*(fendp+2)))) {
    +                    double dval = atof(str_val);
    +                    val = plist_new_real(dval);
    +                } else {
    +                    PLIST_JSON_ERR("%s: invalid character at offset %d when parsing floating point value\n", __func__, (int)(fendp - js));
    +                }
                 } else {
    -                PLIST_JSON_ERR("%s: invalid character at offset %d when parsing floating point value\n", __func__, (int)(fendp - js));
    -            }
    -        } else {
    -            PLIST_JSON_ERR("%s: invalid character at offset %d when parsing numerical value\n", __func__, (int)(endp - js));
    +                PLIST_JSON_ERR("%s: invalid character at offset %d when parsing numerical value\n", __func__, (int)(endp - js));
    +            }
             }
         } else {
             PLIST_JSON_ERR("%s: invalid primitive value '%.*s' encountered\n", __func__, (int)str_len, str_val);
    

    Checked by: seed corpus, 2 files.

    Compare with the upstream fix, 7d2cdc6. Proven means it rebuilt and stopped the crash, not that it is the upstream fix or safe to merge.

  8. ARVO 42531297jqHeap-buffer-overflow READ 2

    Run 1NOT PROVEN

    1: edit did not apply · 2: build failed · 3: build failed

    3 of 3 calls · $0.00856 · Run 1 card

    Attempts 2 and 3 never tested the edit: the build script stopped at "mkdir: cannot create directory '/src/seeds': File exists" because the control build had already run it.

    Run 2NOT PROVEN

    1: still crashed · 2: still crashed · 3: still crashed

    3 of 3 calls · $0.01014 · Run 2 card

  9. ARVO 42531223jqStack-buffer-overflow WRITE 2

    Run 1NOT PROVEN

    1: edit did not apply · 2: edit did not apply · 3: edit did not apply

    3 of 3 calls · $0.00926 · Run 1 card

    Run 2NOT PROVEN

    1: edit did not apply · 2: edit did not apply · 3: edit did not apply

    3 of 3 calls · $0.00956 · Run 2 card

  10. ARVO 42476752libspngHeap-buffer-overflow READ (any size)

    Run 1NOT PROVEN

    1: build failed · 2: build failed · 3: build failed

    3 of 3 calls · $0.00452 · Run 1 card

    Attempts 1, 2 and 3 never tested the edit: the build script stopped at "mkdir: cannot create directory 'build': File exists" because the control build had already run it.

    Run 2NOT PROVEN

    1: still crashed · 2: still crashed · 3: still crashed

    3 of 3 calls · $0.00708 · Run 2 card

Every task

All 100 from run 2. The 67 that did not run or missed a check come first, each with the reason. Every task that ran links to the card the run wrote.

  1. ARVO 42530604jqDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#1
  2. ARVO 42507851libplistDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#2
  3. ARVO 42496387wasm3DID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#3
  4. ARVO 42531297jqDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#8
  5. ARVO 42518269libredwgDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#21
  6. ARVO 42501200jsonDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#31
  7. ARVO 42510753quickjsDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#40
  8. ARVO 42501143kamailioDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#41
  9. ARVO 42477355fileDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#52
  10. ARVO 42513189fluent-bitDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#53
  11. ARVO 42522285libxml2DID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#54
  12. ARVO 42517205curlDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#55
  13. ARVO 420198855readstatDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#57
  14. ARVO 42532046quickjsDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#59
  15. ARVO 42509841openscDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#60
  16. ARVO 42517450openexrDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#62
  17. ARVO 42499939net-snmpDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#63
  18. ARVO 42525816serenityDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#65
  19. ARVO 42523860hdf5DID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#66
  20. ARVO 396777457net-snmpDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#67
  21. ARVO 42512228libjxlDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#68
  22. ARVO 42498959libpngDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#69
  23. ARVO 42522804libxsltDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#70
  24. ARVO 42501136matioDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#71
  25. ARVO 42507220c-blosc2DID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#72
  26. ARVO 379418968assimpDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#73
  27. ARVO 42517530librawDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#74
  28. ARVO 42517784onigurumaDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#75
  29. ARVO 42481233arrowDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#76
  30. ARVO 42498712dnsmasqDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#78
  31. ARVO 42536328libssh2DID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#79
  32. ARVO 411460530openthreadDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#81
  33. ARVO 42513361libjxlDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#84
  34. ARVO 42481492jbig2decDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#87
  35. ARVO 42487660libavifDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#90
  36. ARVO 42497297serenityDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#94
  37. ARVO 42536751gpacDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#99
  38. ARVO 42506689sleuthkitDID NOT RUNThe Nebius sandbox API answered HTTP 500. It counts against the 100.#100
  39. ARVO 42504387open62541REPRODUCEDOSV differsFix cleanClaim differsHeap-use-after-free READ 8$0.00106 · 3.6 s · #24Card
    • The measured crash state differs from the one OSV recorded.
    • The claim read from the report disagrees with the measured crash.
  40. ARVO 42532259simdutfREPRODUCEDOSV differsFix cleanClaim differsHeap-buffer-overflow WRITE (any size)$0.00083 · 4.2 s · #26Card
    • The measured crash state differs from the one OSV recorded.
    • The claim read from the report disagrees with the measured crash.
  41. ARVO 42532225gpacREPRODUCEDOSV differsFix cleanClaim differsHeap-buffer-overflow READ (any size)$0.00174 · 76.7 s · #88Card
    • The measured crash state differs from the one OSV recorded.
    • The claim read from the report disagrees with the measured crash.
  42. ARVO 42508390libplistDUPLICATEOSV differsFix cleanClaim agreesHeap-buffer-overflow READ 2$0.00074 · 3.5 s · #7Card
    • The measured crash state differs from the one OSV recorded.
  43. ARVO 42531223jqREPRODUCEDOSV differsFix cleanClaim agreesStack-buffer-overflow WRITE 2$0.00095 · 3.8 s · #9Card
    • The measured crash state differs from the one OSV recorded.
  44. ARVO 42476752libspngDUPLICATEOSV matchFix cleanClaim differsHeap-buffer-overflow READ (any size)$0.00077 · 3.6 s · #10Card
    • The claim read from the report disagrees with the measured crash.
  45. ARVO 42481221arrowREPRODUCEDOSV differsFix cleanClaim agreesHeap-buffer-overflow READ 4$0.00084 · 3.9 s · #12Card
    • The measured crash state differs from the one OSV recorded.
  46. ARVO 42523942mrubyREPRODUCEDOSV differsFix cleanClaim agreesHeap-use-after-free READ 4$0.00124 · 3.6 s · #13Card
    • The measured crash state differs from the one OSV recorded.
  47. ARVO 42481224arrowREPRODUCEDOSV differsFix cleanClaim agreesHeap-buffer-overflow WRITE 4$0.00083 · 3.9 s · #14Card
    • The measured crash state differs from the one OSV recorded.
  48. ARVO 42525192libxml2NEEDS_INFOOSV differsFix not cleanClaim differsNo crash type$0.00031 · 4.4 s · #16Card
    • Both builds exited 127 without a sanitizer report, so this run could not test the bug.
  49. ARVO 42504114qpid-protonREPRODUCEDOSV differsFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00073 · 4.6 s · #18Card
    • The measured crash state differs from the one OSV recorded.
  50. ARVO 42497241espeak-ngNEEDS_INFOOSV differsFix not cleanClaim differsNo crash type$0.00083 · 3.6 s · #19Card
    • Both builds exited 77 without a sanitizer report, so this run could not test the bug.
  51. ARVO 42522233mrubyREPRODUCEDOSV matchFix cleanClaim differsSegv on unknown address$0.00088 · 3.4 s · #23Card
    • The claim read from the report disagrees with the measured crash.
  52. ARVO 42513620mrubyREPRODUCEDOSV differsFix cleanClaim agreesHeap-buffer-overflow READ 8$0.00086 · 3.6 s · #29Card
    • The measured crash state differs from the one OSV recorded.
  53. ARVO 42475782radare2REPRODUCEDOSV matchFix cleanClaim differsNegative-size-param$0.00219 · 4.2 s · #33Card
    • The claim read from the report disagrees with the measured crash.
  54. ARVO 42498970open62541REPRODUCEDOSV differsFix cleanClaim agreesNegative-size-param$0.00102 · 3.8 s · #35Card
    • The measured crash state differs from the one OSV recorded.
  55. ARVO 42496936c-blosc2NEEDS_INFOOSV differsFix not cleanClaim differsNo crash type$0.00033 · 3.9 s · #37Card
    • Both builds exited 127 without a sanitizer report, so this run could not test the bug.
  56. ARVO 42490025libavcDUPLICATEOSV matchFix cleanClaim differsHeap-buffer-overflow READ 8$0.00102 · 3.7 s · #45Card
    • The claim read from the report disagrees with the measured crash.
  57. ARVO 42517725fluent-bitREPRODUCEDOSV differsFix cleanClaim agreesHeap-buffer-overflow READ 8$0.00093 · 3.7 s · #46Card
    • The measured crash state differs from the one OSV recorded.
  58. ARVO 42522531hdf5REPRODUCEDOSV matchFix cleanClaim differsHeap-buffer-overflow READ 5$0.00102 · 3.9 s · #49Card
    • The claim read from the report disagrees with the measured crash.
  59. ARVO 42488737ndpiDUPLICATEOSV matchFix cleanClaim differsHeap-buffer-overflow READ 1$0.00196 · 4.9 s · #50Card
    • The claim read from the report disagrees with the measured crash.
  60. ARVO 42517796onigurumaREPRODUCEDOSV matchFix cleanClaim differsHeap-buffer-overflow READ 1$0.00093 · 25.4 s · #64Card
    • The claim read from the report disagrees with the measured crash.
  61. ARVO 42532885matioREPRODUCEDOSV differsFix cleanClaim agreesStack-buffer-overflow WRITE 8$0.00142 · 59.4 s · #77Card
    • The measured crash state differs from the one OSV recorded.
  62. ARVO 42526388c-blosc2NEEDS_INFOOSV differsFix not cleanClaim differsNo crash type$0.00047 · 38.3 s · #85Card
    • Both builds exited 127 without a sanitizer report, so this run could not test the bug.
  63. ARVO 42479408openscREPRODUCEDOSV matchFix cleanClaim differsInvalid-free$0.00099 · 28.1 s · #92Card
    • The claim read from the report disagrees with the measured crash.
  64. ARVO 42499964serenityREPRODUCEDOSV matchFix cleanClaim differsUse-after-poison READ 1$0.05478 · 173.6 s · #93Card
    • The claim read from the report disagrees with the measured crash.
  65. ARVO 42523506libheifNEEDS_INFOOSV differsFix not cleanClaim differsNo crash type$0.00043 · 196.8 s · #95Card
    • Both builds exited 127 without a sanitizer report, so this run could not test the bug.
  66. ARVO 42533290igraphNEEDS_INFOOSV differsFix not cleanClaim differsNo crash type$0.00046 · 24.1 s · #97Card
    • Both builds exited 127 without a sanitizer report, so this run could not test the bug.
  67. ARVO 42530151lcmsNEEDS_INFOOSV differsFix not cleanClaim differsNo crash type$0.00041 · 22.8 s · #98Card
    • Both builds exited 127 without a sanitizer report, so this run could not test the bug.
  68. ARVO 42508524libplistDUPLICATEOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00071 · 3.3 s · #4Card
  69. ARVO 42536108minizREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ (any size)$0.00078 · 3.3 s · #5Card
  70. ARVO 42536112minizREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ (any size)$0.00078 · 3.3 s · #6Card
  71. ARVO 42477302libavcREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 4$0.00102 · 4.3 s · #11Card
  72. ARVO 42481945ndpiDUPLICATEOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 2$0.00136 · 4.3 s · #15Card
  73. ARVO 42520614libredwgREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00091 · 4.2 s · #17Card
  74. ARVO 42500367harfbuzzREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 4$0.00089 · 4.7 s · #20Card
  75. ARVO 42471044harfbuzzREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00089 · 4.3 s · #22Card
  76. ARVO 42501162kamailioREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00096 · 3.8 s · #25Card
  77. ARVO 42486565libxml2REPRODUCEDOSV matchFix cleanClaim agreesHeap-use-after-free READ 4$0.00086 · 3.5 s · #27Card
  78. ARVO 42470538radare2REPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.02564 · 5.6 s · #28Card
  79. ARVO 42471105harfbuzzREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00087 · 4.3 s · #30Card
  80. ARVO 42471108libgit2REPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 13$0.00084 · 3.7 s · #32Card
  81. ARVO 42481193ndpiDUPLICATEOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 2$0.00135 · 3.7 s · #34Card
  82. ARVO 42477222libavcREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 4$0.00103 · 4.0 s · #36Card
  83. ARVO 42475195radare2DUPLICATEOSV matchFix cleanClaim agreesHeap-buffer-overflow WRITE 8$0.00220 · 4.8 s · #38Card
  84. ARVO 42499827spice-usbredirREPRODUCEDOSV matchFix cleanClaim agreesHeap-use-after-free WRITE 4$0.00142 · 4.5 s · #39Card
  85. ARVO 42474141openthreadREPRODUCEDOSV matchFix cleanClaim agreesStack-use-after-return READ 1$0.00080 · 4.7 s · #42Card
  86. ARVO 42533590gpacREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 13$0.00166 · 4.1 s · #43Card
  87. ARVO 42517374openscREPRODUCEDOSV matchFix cleanClaim agreesStack-buffer-overflow READ 1$0.00095 · 4.4 s · #44Card
  88. ARVO 42476618openthreadREPRODUCEDOSV matchFix cleanClaim agreesStack-buffer-overflow READ 8$0.00077 · 4.5 s · #47Card
  89. ARVO 42496031irssiREPRODUCEDOSV matchFix cleanClaim agreesHeap-use-after-free READ 4$0.00144 · 3.5 s · #48Card
  90. ARVO 42483517fluent-bitREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00079 · 3.8 s · #51Card
  91. ARVO 42513988libredwgREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow WRITE (any size)$0.00105 · 94.8 s · #56Card
  92. ARVO 42479852libgit2REPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00091 · 30.9 s · #58Card
  93. ARVO 42534483matioREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 8$0.00108 · 59.0 s · #61Card
  94. ARVO 42488172libcoapREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00094 · 39.0 s · #80Card
  95. ARVO 42501148kamailioREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00105 · 48.1 s · #82Card
  96. ARVO 42528883libdwarfDUPLICATEOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 8$0.00098 · 23.8 s · #83Card
  97. ARVO 42513154libpcapREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00091 · 21.1 s · #86Card
  98. ARVO 42471287libgit2REPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00096 · 27.4 s · #89Card
  99. ARVO 42523626libssh2REPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 1$0.00094 · 26.6 s · #91Card
  100. ARVO 42527431libheifREPRODUCEDOSV matchFix cleanClaim agreesHeap-buffer-overflow READ 4$0.00098 · 51.3 s · #96Card