projects
/
litoprism.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
12759d4
)
Canvas creation fails if dimensions are too large
author
MegaBrutal
<code+git@megabrutal.com>
Sun, 25 Dec 2022 01:15:00 +0000
(
02:15
+0100)
committer
MegaBrutal
<code+git@megabrutal.com>
Sun, 25 Dec 2022 01:15:00 +0000
(
02:15
+0100)
src/main.rs
patch
|
blob
|
history
diff --git
a/src/main.rs
b/src/main.rs
index 2d58e6ebfef4b350fb4b850275b9e892bda2661c..9d96a2213b82bc61a80fa49042472b53a5517432 100644
(file)
--- a/
src/main.rs
+++ b/
src/main.rs
@@
-180,8
+180,14
@@
struct Canvas {
}
impl Canvas {
}
impl Canvas {
- fn new(width: u32, height: u32) -> Canvas {
- Canvas { pen: 0, img: ImageBuffer::new(width, height) }
+ fn new(width: u32, height: u32) -> Result<Canvas, CanvasError> {
+ // Image must not be larger than 1 megapixel
+ if width * height > 1048576 {
+ Err(ImageError::dimension_error().into())
+ }
+ else {
+ Ok(Canvas { pen: 0, img: ImageBuffer::new(width, height) })
+ }
}
/*fn from_image(img: RgbImage) -> Canvas {
}
/*fn from_image(img: RgbImage) -> Canvas {
@@
-304,7
+310,7
@@
fn apply_to_canvas<'a, F>(f: F, canvas_option: &'a mut Option<Canvas>, dimension
},
None => match dimensions {
Some((dim_x, dim_y)) =>
},
None => match dimensions {
Some((dim_x, dim_y)) =>
- Ok(Canvas::new(dim_x, dim_y)),
+ Ok(Canvas::new(dim_x, dim_y)
?
),
None =>
Err(CanvasError::NotExists)
}
None =>
Err(CanvasError::NotExists)
}
@@
-406,7
+412,7
@@
async fn img_pgen0(req: HttpRequest, canvas0: web::Data<Arc<Mutex<Canvas0>>>) ->
let scale = 16;
let img: RgbImage = ({
let canvas_option = &mut *canvas0.lock().unwrap();
let scale = 16;
let img: RgbImage = ({
let canvas_option = &mut *canvas0.lock().unwrap();
- Ok(apply_to_canvas( |c, d| rgb_encode_to_canvas(c, d), &mut canvas_option.0,
None
, data)?.img.clone())
+ Ok(apply_to_canvas( |c, d| rgb_encode_to_canvas(c, d), &mut canvas_option.0,
Some((32, 32))
, data)?.img.clone())
} as Result<RgbImage, CanvasError>)?;
let cursor = image_to_cursor(img, scale)?;
Ok(response_image!(cursor))
} as Result<RgbImage, CanvasError>)?;
let cursor = image_to_cursor(img, scale)?;
Ok(response_image!(cursor))
@@
-447,7
+453,7
@@
async fn img_pgen3(req: HttpRequest, path: web::Path<u32>, canvas2: web::Data<Ar
let canvas_option = &mut *canvas2.lock().unwrap();
let mut canvas = match canvas_option.0.take() {
Some(canvas) => canvas,
let canvas_option = &mut *canvas2.lock().unwrap();
let mut canvas = match canvas_option.0.take() {
Some(canvas) => canvas,
- None => Canvas::new(60 * TIMEAVATAR_SIZE_U32, 24 * TIMEAVATAR_SIZE_U32)
+ None => Canvas::new(60 * TIMEAVATAR_SIZE_U32, 24 * TIMEAVATAR_SIZE_U32)
?
};
overlay(&mut canvas.img, &rgbimg, minute * TIMEAVATAR_SIZE_I64, hour * TIMEAVATAR_SIZE_I64);
Ok(canvas_option.0.insert(canvas).img.clone())
};
overlay(&mut canvas.img, &rgbimg, minute * TIMEAVATAR_SIZE_I64, hour * TIMEAVATAR_SIZE_I64);
Ok(canvas_option.0.insert(canvas).img.clone())
@@
-524,7
+530,7
@@
async fn main() -> std::io::Result<()> {
.init();
let listenaddress = env::args().nth(1).unwrap_or_else(|| "127.0.0.1:8080".to_string());
.init();
let listenaddress = env::args().nth(1).unwrap_or_else(|| "127.0.0.1:8080".to_string());
- let canvas0 = Arc::new(Mutex::new(Canvas0(
Some(Canvas::new(32, 32))
)));
+ let canvas0 = Arc::new(Mutex::new(Canvas0(
None
)));
let canvas1 = Arc::new(Mutex::new(Canvas1(None)));
let canvas2 = Arc::new(Mutex::new(Canvas2(None)));
let canvas1 = Arc::new(Mutex::new(Canvas1(None)));
let canvas2 = Arc::new(Mutex::new(Canvas2(None)));