rust-lang / rust-lang/rust-clippy

Lint possible leaked private structs

Open
#7,301 0 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-lint
Dominant language
Rust
Stars
13.5k
Forks
2.2k
Avg merge
2d 10h
Merged PRs (30d)
32

Description

What it does

I discovered yesterday that it's possible to leak private struct types in public functions if that struct is public but lives in a private module. Those on the Rust discord considered this a bug in Rust itself but since it's a breaking change, it might need to wait until 2024. So perhaps this should be added to clippy for the time being.

Categories (optional)
  • Kind: correctness?
Drawbacks

Perhaps this should instead just be added as a warning into rustc

The issue is that this pattern is supposedly intended and is a feature to implement sealed Traits, but it seems pretty much a bug to me for Structs.

Example

This is a minimal example showing the leaking of structs.

use foo::bbb;
// use foo::bar::Bar; // error since `bar` is private

fn main() {
    bbb();
}

mod foo {
    use bar::Bar;

    pub fn bbb() -> Bar {
        Bar
    }

    mod bar {
        pub struct Bar;
    }
} 

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by compiling the minimal Rust example in the issue and confirm that a public function exposes a struct from a private module. No source files or tests are named; done means defining the intended Clippy behavior for this case and adding coverage showing that the leak is detected.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.