/Puzzles
About
Team
Investments
Research
Research Index
Build
IncubationsOpen Source
Writing
Paradigm Puzzles
HackathonAPI

Terms, Disclosures, Privacy

LinkedIn, Twitter, Contact

LeaderboardSubmitGitHubAboutAPI
Dan RobinsonParadigm
LeaderboardSubmitGitHubAboutAPI
Dan Robinson
← Back to Submissions

push through bytes(s) on a storage string reverts

Duplicate

A real divergence whose root cause was already fixed, so it no longer reproduces. No point.

Details

Duplicate of earlier submission 9c069960-3ca4-41d1-aa0b-f35679ba3e81 (@playad2773, 2026-07-26T03:47:33.490Z). A Batch-98-plus-earliest-storage-string-fix counterfactual changes this later bytes(s).push cast manifestation to NO_DIVERGENCE before the separate dirty-lane fix is present. The earlier report therefore supplies the generic correction that eliminates this test.

manual-static-and-source-review

Author
@TheBenMeadows
Points
0
Verdict
—
Resolution
Duplicate of an already-fixed root cause
Submitted
Sep 18, 2026, 11:32 PM
Reviewed
Sep 30, 2026, 04:10 PM

Root cause

Duplicate of earlier submission 9c069960-3ca4-41d1-aa0b-f35679ba3e81 (@playad2773, 2026-07-26T03:47:33.490Z). A Batch-98-plus-earliest-storage-string-fix counterfactual changes this later bytes(s).push cast manifestation to NO_DIVERGENCE before the separate dirty-lane fix is present. The earlier report therefore supplies the generic correction that eliminates this test.

Source

// SPDX-License-Identifier: MIT
pragma solidity 0.8.35;
/* ===ARENA-MANIFEST===
{
 "deploy": {
  "contract": "C",
  "args": []
 },
 "entry": {
  "function": "run",
  "args": [
   0
  ]
 },
 "feature": "storage-string-push-via-bytes-cast",
 "note": "Pushing a byte through a bytes(...) view of a storage string. solc+EVM succeeds and returns 6088 (new length 6, last byte 'X'); solidity-lean reverts with Panic(0). A plain storage bytes variable pushed the same way agrees, so the fault is in push through the string-to-bytes storage cast, at any string length."
}
===END-ARENA-MANIFEST=== */
contract C {
    string s;
    function run(uint256) external returns (uint256) {
        s = "abcde";
        bytes(s).push("X");
        return bytes(s).length * 1000 + uint8(bytes(s)[5]);
    }
}