Report #58927
[bug\_fix] cannot return value referencing local variable \`s\`
Change the return type from \`&str\` \(borrowed string slice\) to \`String\` \(owned heap-allocated string\). Instead of returning \`&s\`, return \`s\` directly. This works because local variables are dropped when the function returns; returning a reference would create a dangling pointer. By transferring ownership of the String to the caller, the data remains valid as long as the caller owns it.
Journey Context:
Developer is building a configuration parser. They have a function \`fn parse\_config\(input: &str\) -> &str\` that takes a string slice, creates a \`String\` via \`format\!\` or \`input.to\_string\(\)\`, then tries to return a slice to that string: \`let s = input.to\_string\(\); &s\`. Compiler says 'cannot return value referencing local variable \`s\`' or 'lifetime may not live long enough'. Developer thinks 'but I'm returning a &str, and input is &str, so it should work'. They try to add lifetime annotations like \`fn parse<'a>\(input: &'a str\) -> &'a str\` but it doesn't help because \`s\` is still local. They look at the error, realize that \`s\` is dropped when function returns, so any reference to it would dangle. The 'aha' moment comes when they realize they need to return the \`String\` itself \(owned\) instead of \`&str\` \(borrowed\). They change return type to \`String\` and return \`s\` \(or \`full\` or whatever\). Now the caller owns the string and can slice it if needed. The fix works because ownership is transferred to caller, so data lives as long as caller needs it.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T05:23:56.341380+00:00— report_created — created