Skip to content

bug: stdJson readBytes cannot handle 20-byte values #592

@dcposch

Description

@dcposch

Summary

stdJson appears to be broken in latest forge-std. Reading 20-byte values with readBytes(json, path) returns incorrect results or reverts.

Versions

forge-std: v1.2.0

forge --version
forge 0.2.0 (26a7559 2024-07-31T00:19:23.655582000Z)

Minimal reproduction

pragma solidity ^0.8.21;

import {Test} from "forge-std/Test.sol";
import {stdJson} from "forge-std/StdJson.sol";

using stdJson for string;

contract JsonTest is Test {
    function testJson() public {
        string memory data = '{"data":"0x1234"}';
        bytes memory hello = data.readBytes(".data");
        assertEq(hello, hex"1234");

        // 19 bytes = works
        data = '{"data":"0x00000000000000000000000000000000000000"}';
        hello = data.readBytes(".data");
        assertEq(hello, hex"00000000000000000000000000000000000000");

        // 21 bytes = works
        data = '{"data":"0x000000000000000000000000000000000000000000"}';
        hello = data.readBytes(".data");
        assertEq(hello, hex"000000000000000000000000000000000000000000");

        // 20 bytes = returns without error, WRONG DATA
        data = '{"data":"0x0000000000000000000000000000000000000000"}';
        hello = data.readBytes(".data");
        assertEq(hello, hex"");

        // 20 bytes = REVERTS
        data = '{"data":"0x4bf5122f344554c53bde2ebb8cd2b7e3d1600ad6"}';
        data.readBytes(".data");
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions