From 139a3d52189f170124a2c177f921dd04b40498a1 Mon Sep 17 00:00:00 2001 From: Rani Elhusseini Date: Tue, 14 Apr 2026 13:56:19 +0200 Subject: [PATCH 1/3] fix: catch throw instead of error --- src/dev_scheduler.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dev_scheduler.erl b/src/dev_scheduler.erl index 3d165342a..e1598b0ed 100644 --- a/src/dev_scheduler.erl +++ b/src/dev_scheduler.erl @@ -381,7 +381,7 @@ post_schedule(Base, Req, Opts) -> ToSched -> do_post_schedule(Base, Req, ToSched, Opts) catch - error:{necessary_message_not_found, _, _} -> + throw:{necessary_message_not_found, _, _} -> {error, #{ <<"status">> => 404, From 118164768bb15ecc5da9c6b624218bb36aa38b73 Mon Sep 17 00:00:00 2001 From: Rani Elhusseini Date: Tue, 14 Apr 2026 19:46:39 +0200 Subject: [PATCH 2/3] chore: error on invalid from/to non-numeric slot --- src/dev_scheduler.erl | 90 +++++++++++++++++++++++++------------------ 1 file changed, 53 insertions(+), 37 deletions(-) diff --git a/src/dev_scheduler.erl b/src/dev_scheduler.erl index e1598b0ed..07b4ed39a 100644 --- a/src/dev_scheduler.erl +++ b/src/dev_scheduler.erl @@ -812,49 +812,65 @@ get_schedule(Base, Req, Opts) -> case hb_ao:get(<<"from">>, Req, not_found, Opts) of not_found -> 0; X when X < 0 -> 0; - FromRes -> hb_util:int(FromRes) + FromRes -> + case hb_util:safe_int(FromRes) of + {ok, FromInt} when FromInt < 0 -> 0; + {ok, FromInt} -> FromInt; + {error, _} -> {error, invalid_from} + end end, To = case hb_ao:get(<<"to">>, Req, not_found, Opts) of not_found -> undefined; - ToRes -> hb_util:int(ToRes) + ToRes -> + case hb_util:safe_int(ToRes) of + {ok, ToInt} -> ToInt; + {error, _} -> {error, invalid_to} + end end, - Format = hb_ao:get(<<"accept">>, Req, <<"application/http">>, Opts), - ?event( - {parsed_get_schedule, - {process, ProcID}, - {from, From}, - {to, To}, - {format, Format} - } - ), - case find_server(ProcID, Base, Opts) of - {local, _PID} -> - generate_local_schedule(Format, ProcID, From, To, Opts); - {redirect, Redirect} -> - ?event({redirect_received, {redirect, Redirect}}), - case hb_opts:get(scheduler_follow_redirects, true, Opts) of - true -> - case get_remote_schedule(ProcID, From, To, Redirect, Opts) of - {ok, Res} -> - case uri_string:percent_decode(Format) of - <<"application/aos-2">> -> - dev_scheduler_formats:assignments_to_aos2( - ProcID, - hb_ao:get( - <<"assignments">>, Res, [], Opts), - hb_util:atom(hb_ao:get( - <<"continues">>, Res, false, Opts)), - Opts - ); - _ -> - {ok, Res} + case {From, To} of + {{error, invalid_from}, _} -> + {error, #{ <<"status">> => 400, <<"body">> => <<"invalid_from">> }}; + {_, {error, invalid_to}} -> + {error, #{ <<"status">> => 400, <<"body">> => <<"invalid_to">> }}; + _ -> + Format = hb_ao:get(<<"accept">>, Req, <<"application/http">>, Opts), + ?event( + {parsed_get_schedule, + {process, ProcID}, + {from, From}, + {to, To}, + {format, Format} + } + ), + case find_server(ProcID, Base, Opts) of + {local, _PID} -> + generate_local_schedule(Format, ProcID, From, To, Opts); + {redirect, Redirect} -> + ?event({redirect_received, {redirect, Redirect}}), + case hb_opts:get(scheduler_follow_redirects, true, Opts) of + true -> + case get_remote_schedule(ProcID, From, To, Redirect, Opts) of + {ok, Res} -> + case uri_string:percent_decode(Format) of + <<"application/aos-2">> -> + dev_scheduler_formats:assignments_to_aos2( + ProcID, + hb_ao:get( + <<"assignments">>, Res, [], Opts), + hb_util:atom(hb_ao:get( + <<"continues">>, Res, false, Opts)), + Opts + ); + _ -> + {ok, Res} + end; + {error, Res} -> + {error, Res} end; - {error, Res} -> - {error, Res} - end; - false -> - {ok, Redirect} + false -> + {ok, Redirect} + end end end. From 932bf4537d70496dadfdf2ef78b13510c2c3890d Mon Sep 17 00:00:00 2001 From: Rani Elhusseini Date: Tue, 14 Apr 2026 20:20:32 +0200 Subject: [PATCH 3/3] chore: remove stale branch --- src/dev_scheduler.erl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/dev_scheduler.erl b/src/dev_scheduler.erl index 07b4ed39a..d6939f8fb 100644 --- a/src/dev_scheduler.erl +++ b/src/dev_scheduler.erl @@ -811,7 +811,6 @@ get_schedule(Base, Req, Opts) -> From = case hb_ao:get(<<"from">>, Req, not_found, Opts) of not_found -> 0; - X when X < 0 -> 0; FromRes -> case hb_util:safe_int(FromRes) of {ok, FromInt} when FromInt < 0 -> 0;