{"record":{"id":"f7d8a4e3dfbad651","repo":"block/buzz","slug":"max-objects-must-be-at-most","errorCode":null,"errorMessage":"--max-objects must be at most {}","messagePattern":"--max-objects must be at most (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/buzz-admin/src/main.rs","lineNumber":184,"sourceCode":"        }\n        Command::StorageSnapshot { max_objects } => cmd_storage_snapshot(max_objects).await,\n        Command::AddMember { pubkey, role } => cmd_add_member(pubkey, role).await,\n        Command::RemoveMember { pubkey, role } => cmd_remove_member(pubkey, role).await,\n        Command::ListMembers => cmd_list_members().await,\n        Command::ProductFeedback {\n            command: ProductFeedbackCommand::List { limit },\n        } => cmd_list_product_feedback(limit).await,\n        Command::Deletions { command } => deletions::run(command).await,\n        Command::ReconcileChannels { channel, relay_key } => {\n            reconcile_channels(channel, relay_key).await?;\n            Ok(0)\n        }\n    }\n}\n\nasync fn cmd_storage_snapshot(max_objects: u64) -> Result<i32> {\n    let max_objects_db = i64::try_from(max_objects)\n        .map_err(|_| anyhow::anyhow!(\"--max-objects must be at most {}\", i64::MAX))?;\n    if max_objects == 0 {\n        return Err(anyhow::anyhow!(\"--max-objects must be greater than zero\"));\n    }\n\n    let db = connect_db().await?;\n    let mut leader = db.try_lock_storage_accounting().await?.ok_or_else(|| {\n        anyhow::anyhow!(\"another storage-snapshot worker already holds the lease\")\n    })?;\n    let storage = Arc::new(MediaStorage::new(&storage_config_from_env()?)?);\n    let code_sha =\n        std::env::var(\"BUZZ_STORAGE_SNAPSHOT_CODE_SHA\").unwrap_or_else(|_| \"unknown\".to_string());\n    if code_sha.is_empty() || code_sha.len() > 128 {\n        return Err(anyhow::anyhow!(\n            \"BUZZ_STORAGE_SNAPSHOT_CODE_SHA must contain 1 to 128 bytes\"\n        ));\n    }\n\n    println!(","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/block/buzz/blob/ef2aa1ae38fadcc0bc22b8bf6ed96b35933146be/crates/buzz-admin/src/main.rs#L166-L202","documentation":"buzz-admin validates the --max-objects CLI flag before running a storage snapshot. The value is parsed as u64 but the database column it feeds (save_snapshot's max_objects) is i64, so on a 64-bit platform the only failing conversion is beyond i64::MAX. The command aborts rather than silently clamping or overflowing the persisted limit.","triggerScenarios":"Running `buzz-admin storage-snapshot --max-objects` with a u64 value greater than i64::MAX (9223372036854775807), i.e. any value from 9223372036854775808 to 18446744073709551615. i64::try_from(u64) fails and the map_err converts it into this anyhow error.","commonSituations":"Typing an absurdly large cap by hand (pasted digit string, scripted value meant as bytes with an off-by-scale), or a wrapper script substituting a sentinel like u64::MAX to mean 'unlimited'.","solutions":["Pass a value <= 9223372036854775807 (i64::MAX) for --max-objects.","If the intent is 'unlimited', use a large-but-valid bound (e.g. 9223372036854775807) instead of a u64 sentinel.","If a wrapper script computes the value, clamp it: min(value, i64::MAX) before invoking the CLI."],"exampleFix":"// before\nbuzz-admin storage-snapshot --max-objects 18446744073709551615\n// after\nbuzz-admin storage-snapshot --max-objects 9223372036854775807","handlingStrategy":"validation","validationCode":"const I64_MAX: u64 = 9223372036854775807;\nif max_objects == 0 || max_objects > I64_MAX {\n    return Err(format!(\"--max-objects must be in 1..={}\", I64_MAX));\n}","typeGuard":"fn valid_max_objects(v: u64) -> bool {\n    v > 0 && v <= i64::MAX as u64\n}","tryCatchPattern":null,"preventionTips":["Clamp u64 inputs to i64::MAX before passing to commands backed by i64 columns.","Treat 0 as 'unset' and substitute a default cap in wrapper scripts.","Validate CLI numeric args against the downstream column type, not just the parse type."],"tags":["cli","argument-validation","range-check","storage"],"backgroundTag":"value-out-of-range","analyzedSha":"ef2aa1ae38fadcc0bc22b8bf6ed96b35933146be","analyzedAt":"2026-09-20T04:38:17.397Z","contentChangedAt":"2026-09-20T04:38:17.397Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}