app: check for overflowing user resolution values

This commit is contained in:
hinto-janaiyo 2022-12-06 22:01:36 -05:00
parent 9c323ec502
commit 31f23d9d58
No known key found for this signature in database
GPG key ID: B1C5A64B80691E45
4 changed files with 23 additions and 11 deletions

View file

@ -98,6 +98,8 @@ pub const OS_NAME: &str = "Linux";
// Gupax // Gupax
pub const GUPAX_UPDATE: &str = "Check for updates on Gupax, P2Pool, and XMRig via GitHub's API and upgrade automatically"; pub const GUPAX_UPDATE: &str = "Check for updates on Gupax, P2Pool, and XMRig via GitHub's API and upgrade automatically";
pub const GUPAX_AUTO_UPDATE: &str = "Automatically check for updates at startup"; pub const GUPAX_AUTO_UPDATE: &str = "Automatically check for updates at startup";
pub const GUPAX_SHOULD_RESTART: &str = "Gupax was updated. A restart is recommended but not required";
pub const GUPAX_UP_TO_DATE: &str = "Gupax is up-to-date";
#[cfg(not(target_os = "macos"))] #[cfg(not(target_os = "macos"))]
pub const GUPAX_UPDATE_VIA_TOR: &str = "Update through the Tor network. Tor is embedded within Gupax; a Tor system proxy is not required"; pub const GUPAX_UPDATE_VIA_TOR: &str = "Update through the Tor network. Tor is embedded within Gupax; a Tor system proxy is not required";
#[cfg(target_os = "macos")] // Arti library has issues on macOS #[cfg(target_os = "macos")] // Arti library has issues on macOS
@ -106,8 +108,8 @@ pub const GUPAX_ASK_BEFORE_QUIT: &str = "Ask before quitting Gupax";
pub const GUPAX_SAVE_BEFORE_QUIT: &str = "Automatically save any changed settings before quitting"; pub const GUPAX_SAVE_BEFORE_QUIT: &str = "Automatically save any changed settings before quitting";
pub const GUPAX_WIDTH: &str = "Set the width of the Gupax window"; pub const GUPAX_WIDTH: &str = "Set the width of the Gupax window";
pub const GUPAX_HEIGHT: &str = "Set the height of the Gupax window"; pub const GUPAX_HEIGHT: &str = "Set the height of the Gupax window";
pub const GUPAX_LOCK_WIDTH: &str = "Automatically match the height against the width in a 16:10 ratio; aka HEIGHT = WIDTH / 1.6"; pub const GUPAX_LOCK_WIDTH: &str = "Automatically match the HEIGHT against the WIDTH in a 4:3 ratio";
pub const GUPAX_LOCK_HEIGHT: &str = "Automatically match the width against the height in a 16:10 ratio; aka WIDTH = HEIGHT * 1.6"; pub const GUPAX_LOCK_HEIGHT: &str = "Automatically match the WIDTH against the HEIGHT in a 4:3 ratio";
pub const GUPAX_NO_LOCK: &str = "Allow individual selection of width and height"; pub const GUPAX_NO_LOCK: &str = "Allow individual selection of width and height";
pub const GUPAX_SET: &str = "Set the width/height of the Gupax window to the current values"; pub const GUPAX_SET: &str = "Set the width/height of the Gupax window to the current values";
pub const GUPAX_TAB_ABOUT: &str = "Set the tab Gupax starts on to: About"; pub const GUPAX_TAB_ABOUT: &str = "Set the tab Gupax starts on to: About";

View file

@ -192,13 +192,13 @@ impl Gupax {
Ratio::Width => { Ratio::Width => {
let width = self.selected_width as f64; let width = self.selected_width as f64;
let _height = self.selected_height as f64; let _height = self.selected_height as f64;
let height = (width / 1.6).round(); let height = (width / 1.333).round();
self.selected_height = height as u16; self.selected_height = height as u16;
}, },
Ratio::Height => { Ratio::Height => {
let _width = self.selected_width as f64; let _width = self.selected_width as f64;
let height = self.selected_height as f64; let height = self.selected_height as f64;
let width = (height * 1.6).round(); let width = (height * 1.333).round();
self.selected_width = width as u16; self.selected_width = width as u16;
}, },
} }

View file

@ -49,7 +49,13 @@ use num_format::{Buffer,Locale};
use log::*; use log::*;
//---------------------------------------------------------------------------------------------------- Constants //---------------------------------------------------------------------------------------------------- Constants
// The locale numbers are formatting in is English, which looks like: [1,000]
const LOCALE: num_format::Locale = num_format::Locale::en; const LOCALE: num_format::Locale = num_format::Locale::en;
// The max amount of bytes of process output we are willing to
// hold in memory before it's too much and we need to reset.
const MAX_PROCESS_OUTPUT_BYTES: usize = 56_000_000;
// Just a little leeway so a reset will go off before the [String] allocates more memory.
const PROCESS_OUTPUT_LEEWAY: usize = MAX_PROCESS_OUTPUT_BYTES - 1000;
//---------------------------------------------------------------------------------------------------- [Helper] Struct //---------------------------------------------------------------------------------------------------- [Helper] Struct
// A meta struct holding all the data that gets processed in this thread // A meta struct holding all the data that gets processed in this thread
@ -124,7 +130,7 @@ impl Process {
// P2Pool log level 1 produces a bit less than 100,000 lines a day. // P2Pool log level 1 produces a bit less than 100,000 lines a day.
// Assuming each line averages 80 UTF-8 scalars (80 bytes), then this // Assuming each line averages 80 UTF-8 scalars (80 bytes), then this
// initial buffer should last around a week (56MB) before resetting. // initial buffer should last around a week (56MB) before resetting.
output: Arc::new(Mutex::new(String::with_capacity(56_000_000))), output: Arc::new(Mutex::new(String::with_capacity(MAX_PROCESS_OUTPUT_BYTES))),
input: vec![String::new()], input: vec![String::new()],
} }
} }
@ -210,7 +216,7 @@ impl Helper {
// This will also append a message showing it was reset. // This will also append a message showing it was reset.
fn check_reset_output(output: &Arc<Mutex<String>>, name: ProcessName) { fn check_reset_output(output: &Arc<Mutex<String>>, name: ProcessName) {
let mut output = output.lock().unwrap(); let mut output = output.lock().unwrap();
if output.len() > 55_999_000 { if output.len() > PROCESS_OUTPUT_LEEWAY {
let name = match name { let name = match name {
ProcessName::P2pool => "P2Pool", ProcessName::P2pool => "P2Pool",
ProcessName::Xmrig => "XMRig", ProcessName::Xmrig => "XMRig",

View file

@ -693,9 +693,13 @@ fn main() {
init_logger(now); init_logger(now);
let mut app = App::new(now); let mut app = App::new(now);
init_auto(&mut app); init_auto(&mut app);
let initial_window_size = match app.state.gupax.simple { let selected_width = app.state.gupax.selected_width as f32;
true => Some(Vec2::new(app.state.gupax.selected_width as f32, app.state.gupax.selected_height as f32)), let selected_height = app.state.gupax.selected_height as f32;
false => Some(Vec2::new(APP_DEFAULT_WIDTH, APP_DEFAULT_HEIGHT)), let initial_window_size = if selected_width > APP_MAX_WIDTH || selected_height > APP_MAX_HEIGHT {
warn!("App | Set width or height was greater than the maximum! Starting with the default resolution...");
Some(Vec2::new(APP_DEFAULT_WIDTH, APP_DEFAULT_HEIGHT))
} else {
Some(Vec2::new(app.state.gupax.selected_width as f32, app.state.gupax.selected_height as f32))
}; };
let options = init_options(initial_window_size); let options = init_options(initial_window_size);
match clean_dir() { match clean_dir() {
@ -942,8 +946,8 @@ impl eframe::App for App {
// [Gupax Version] // [Gupax Version]
// Is yellow if the user updated and should (but isn't required to) restart. // Is yellow if the user updated and should (but isn't required to) restart.
match *self.restart.lock().unwrap() { match *self.restart.lock().unwrap() {
Restart::Yes => ui.add_sized([width, height], Label::new(RichText::new(&self.name_version).color(YELLOW))).on_hover_text("Gupax was updated. A restart is recommended but not required."), Restart::Yes => ui.add_sized([width, height], Label::new(RichText::new(&self.name_version).color(YELLOW))).on_hover_text(GUPAX_SHOULD_RESTART),
_ => ui.add_sized([width, height], Label::new(&self.name_version)).on_hover_text("Gupax is up-to-date"), _ => ui.add_sized([width, height], Label::new(&self.name_version)).on_hover_text(GUPAX_UP_TO_DATE),
}; };
ui.separator(); ui.separator();
// [OS] // [OS]