From 90f81bb871cc40c6fff9ea5755fa72cc6344af32 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 10 Nov 2016 12:20:47 -0800 Subject: [PATCH] ircd::js: Return undefined for args::operator[]; bounds check on args::at(). --- include/ircd/js/args.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/ircd/js/args.h b/include/ircd/js/args.h index bd0335e30..0bd6afe0e 100644 --- a/include/ircd/js/args.h +++ b/include/ircd/js/args.h @@ -32,6 +32,7 @@ struct args size_t size() const { return length(); } bool has(const size_t &at) const { return size() > at; } + value at(const size_t &at) const; value operator[](const size_t &at) const; args(const unsigned &argc, JS::Value *const &argv); @@ -47,6 +48,13 @@ args::args(const unsigned &argc, inline value args::operator[](const size_t &at) const +{ + return length() > at? JS::CallArgs::operator[](at) : value{}; +} + +inline value +args::at(const size_t &at) +const { if(unlikely(length() <= at)) throw range_error("Missing required argument #%zu", at);