Change do_compare to take reference instead of ptr

Resolves potential nullptr dereference.
This commit is contained in:
JJ Marr 2024-12-20 22:10:26 -05:00
parent bff19779a4
commit f0de25a19c
6 changed files with 35 additions and 35 deletions

View file

@ -69,9 +69,9 @@ void move_map_callable::get_inputs(formula_input_vector& inputs) const
add_input(inputs, "moves");
}
int move_callable::do_compare(const formula_callable* callable) const
int move_callable::do_compare(const formula_callable& callable) const
{
const move_callable* mv_callable = dynamic_cast<const move_callable*>(callable);
const move_callable* mv_callable = dynamic_cast<const move_callable*>(&callable);
if(mv_callable == nullptr) {
return formula_callable::do_compare(callable);
}
@ -98,9 +98,9 @@ variant move_callable::execute_self(variant ctxt) {
return variant(move_result->is_gamestate_changed());
}
int move_partial_callable::do_compare(const formula_callable* callable) const
int move_partial_callable::do_compare(const formula_callable& callable) const
{
const move_partial_callable* mv_callable = dynamic_cast<const move_partial_callable*>(callable);
const move_partial_callable* mv_callable = dynamic_cast<const move_partial_callable*>(&callable);
if(mv_callable == nullptr) {
return formula_callable::do_compare(callable);
}
@ -184,9 +184,9 @@ void attack_callable::get_inputs(formula_input_vector& inputs) const {
add_input(inputs, "move_from");
}
int attack_callable::do_compare(const wfl::formula_callable* callable)
int attack_callable::do_compare(const wfl::formula_callable& callable)
const {
const attack_callable* a_callable = dynamic_cast<const attack_callable*>(callable);
const attack_callable* a_callable = dynamic_cast<const attack_callable*>(&callable);
if(a_callable == nullptr) {
return formula_callable::do_compare(callable);
}

View file

@ -63,7 +63,7 @@ public:
/** Compare two attacks in deterministic way or compare pointers
* (nondeterministic in consequent game runs) if method argument is not
* attack_callable */
int do_compare(const formula_callable* callable) const override;
int do_compare(const formula_callable& callable) const override;
variant execute_self(variant ctxt) override;
};
@ -83,7 +83,7 @@ class move_callable : public action_callable {
add_input(inputs, "dst");
}
int do_compare(const formula_callable* callable) const override;
int do_compare(const formula_callable& callable) const override;
public:
move_callable(const map_location& src, const map_location& dst) :
src_(src), dst_(dst)
@ -112,7 +112,7 @@ class move_partial_callable : public action_callable {
add_input(inputs, "dst");
}
int do_compare(const formula_callable* callable) const override;
int do_compare(const formula_callable& callable) const override;
public:
move_partial_callable(const map_location& src, const map_location& dst) :
src_(src), dst_(dst)

View file

@ -71,12 +71,12 @@ public:
bool equals(const formula_callable& other) const
{
return do_compare(&other) == 0;
return do_compare(other) == 0;
}
bool less(const formula_callable& other) const
{
return do_compare(&other) < 0;
return do_compare(other) < 0;
}
bool has_key(const std::string& key) const
@ -143,17 +143,17 @@ protected:
PLAIN_LOG << "ERROR: cannot set key '" << key << "' on object";
}
virtual int do_compare(const formula_callable* callable) const
virtual int do_compare(const formula_callable& callable) const
{
if(type_ < callable->type_) {
if(type_ < callable.type_) {
return -1;
}
if(type_ > callable->type_) {
if(type_ > callable.type_) {
return 1;
}
return this < callable ? -1 : (this == callable ? 0 : 1);
return this < &callable ? -1 : (this == &callable ? 0 : 1);
}
// Note: this function should NOT overwrite str, but append text to it!

View file

@ -58,9 +58,9 @@ void location_callable::get_inputs(formula_input_vector& inputs) const
add_input(inputs, "y");
}
int location_callable::do_compare(const formula_callable* callable) const
int location_callable::do_compare(const formula_callable& callable) const
{
const location_callable* loc_callable = dynamic_cast<const location_callable*>(callable);
const location_callable* loc_callable = dynamic_cast<const location_callable*>(&callable);
if(loc_callable == nullptr) {
return formula_callable::do_compare(callable);
}
@ -150,9 +150,9 @@ void attack_type_callable::get_inputs(formula_input_vector& inputs) const
add_input(inputs, "specials");
}
int attack_type_callable::do_compare(const formula_callable* callable) const
int attack_type_callable::do_compare(const formula_callable& callable) const
{
const attack_type_callable* att_callable = dynamic_cast<const attack_type_callable*>(callable);
const attack_type_callable* att_callable = dynamic_cast<const attack_type_callable*>(&callable);
if(att_callable == nullptr) {
return formula_callable::do_compare(callable);
}
@ -423,9 +423,9 @@ void unit_callable::get_inputs(formula_input_vector& inputs) const
add_input(inputs, "wml_vars");
}
int unit_callable::do_compare(const formula_callable* callable) const
int unit_callable::do_compare(const formula_callable& callable) const
{
const unit_callable* u_callable = dynamic_cast<const unit_callable*>(callable);
const unit_callable* u_callable = dynamic_cast<const unit_callable*>(&callable);
if(u_callable == nullptr) {
return formula_callable::do_compare(callable);
}
@ -509,9 +509,9 @@ void unit_type_callable::get_inputs(formula_input_vector& inputs) const
add_input(inputs, "usage");
}
int unit_type_callable::do_compare(const formula_callable* callable) const
int unit_type_callable::do_compare(const formula_callable& callable) const
{
const unit_type_callable* u_callable = dynamic_cast<const unit_type_callable*>(callable);
const unit_type_callable* u_callable = dynamic_cast<const unit_type_callable*>(&callable);
if(u_callable == nullptr) {
return formula_callable::do_compare(callable);
}
@ -594,9 +594,9 @@ void config_callable::get_inputs(formula_input_vector& inputs) const
}
}
int config_callable::do_compare(const formula_callable* callable) const
int config_callable::do_compare(const formula_callable& callable) const
{
const config_callable* cfg_callable = dynamic_cast<const config_callable*>(callable);
const config_callable* cfg_callable = dynamic_cast<const config_callable*>(&callable);
if(cfg_callable == nullptr) {
return formula_callable::do_compare(callable);
}
@ -666,9 +666,9 @@ void terrain_callable::get_inputs(formula_input_vector& inputs) const
add_input(inputs, "owner_side");
}
int terrain_callable::do_compare(const formula_callable* callable) const
int terrain_callable::do_compare(const formula_callable& callable) const
{
const terrain_callable* terr_callable = dynamic_cast<const terrain_callable*>(callable);
const terrain_callable* terr_callable = dynamic_cast<const terrain_callable*>(&callable);
if(terr_callable == nullptr) {
return formula_callable::do_compare(callable);
}

View file

@ -63,7 +63,7 @@ public:
variant get_value(const std::string& key) const override;
void get_inputs(formula_input_vector& inputs) const override;
int do_compare(const formula_callable* callable) const override;
int do_compare(const formula_callable& callable) const override;
private:
const map_location loc_;
@ -104,7 +104,7 @@ private:
variant get_value(const std::string& key) const override;
void get_inputs(formula_input_vector& inputs) const override;
int do_compare(const formula_callable* callable) const override;
int do_compare(const formula_callable& callable) const override;
};
class attack_type_callable : public formula_callable
@ -115,7 +115,7 @@ public:
variant get_value(const std::string& key) const override;
void get_inputs(formula_input_vector& inputs) const override;
int do_compare(const formula_callable* callable) const override;
int do_compare(const formula_callable& callable) const override;
const attack_type& get_attack_type() const { return *att_; }
@ -136,7 +136,7 @@ public:
variant get_value(const std::string& key) const override;
void get_inputs(formula_input_vector& inputs) const override;
int do_compare(const formula_callable* callable) const override;
int do_compare(const formula_callable& callable) const override;
const unit& get_unit() const { return u_; }
const map_location& get_location() const { return loc_; }
@ -157,7 +157,7 @@ public:
variant get_value(const std::string& key) const override;
void get_inputs(formula_input_vector& inputs) const override;
int do_compare(const formula_callable* callable) const override;
int do_compare(const formula_callable& callable) const override;
const unit_type& get_unit_type() const { return u_; }
@ -172,7 +172,7 @@ public:
variant get_value(const std::string& key) const override;
void get_inputs(formula_input_vector& inputs) const override;
int do_compare(const formula_callable* callable) const override;
int do_compare(const formula_callable& callable) const override;
const config& get_config() const { return cfg_; }

View file

@ -82,8 +82,8 @@ public:
}
}
}
int do_compare(const formula_callable* other) const {
const lua_callable* lua = dynamic_cast<const lua_callable*>(other);
int do_compare(const formula_callable& other) const {
const lua_callable* lua = dynamic_cast<const lua_callable*>(&other);
if(lua == nullptr) {
return formula_callable::do_compare(other);
}