Skip to content

Commit

Permalink
semantic_analyzer: check if positional parameters was given
Browse files Browse the repository at this point in the history
Fixes: #717
  • Loading branch information
mmarchini authored and danobi committed Jun 6, 2019
1 parent 374c240 commit acec163
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/ast/semantic_analyser.cpp
Expand Up @@ -23,6 +23,10 @@ void SemanticAnalyser::visit(Integer &integer)
void SemanticAnalyser::visit(PositionalParameter &param)
{
param.type = SizedType(Type::integer, 8);
if (static_cast<size_t>(param.n) > bpftrace_.num_params()) {
err_ << "missing positional parameter $" << param.n << std::endl;
return;
}
std::string pstr = bpftrace_.get_param(param.n);
if (is_final_pass()) {
if (!bpftrace_.is_numeric(pstr) && !param.is_in_str) {
Expand Down
5 changes: 5 additions & 0 deletions src/bpftrace.cpp
Expand Up @@ -594,6 +594,11 @@ std::string BPFtrace::get_param(size_t i) const
return params_.at(i-1);
}

size_t BPFtrace::num_params() const
{
return params_.size();
}

void perf_event_lost(void *cb_cookie __attribute__((unused)), uint64_t lost)
{
auto bpftrace = static_cast<BPFtrace*>(cb_cookie);
Expand Down
1 change: 1 addition & 0 deletions src/bpftrace.h
Expand Up @@ -93,6 +93,7 @@ class BPFtrace
void add_param(const std::string &param);
bool is_numeric(std::string str) const;
std::string get_param(size_t index) const;
size_t num_params() const;
void request_finalize();
std::string cmd_;
int pid_{0};
Expand Down

0 comments on commit acec163

Please sign in to comment.