Skip to content

Commit

Permalink
Fix potential crashes by using shared pointers for app data (#3900)
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobkeeler committed Apr 7, 2022
1 parent 7cdb7e7 commit 6b423eb
Show file tree
Hide file tree
Showing 20 changed files with 530 additions and 519 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -113,14 +113,15 @@ class InitialApplicationData {
public:
virtual ~InitialApplicationData() {}

virtual const smart_objects::SmartObject* app_types() const = 0;
virtual const smart_objects::SmartObject* vr_synonyms() const = 0;
virtual const smart_objects::SmartObjectSPtr app_types() const = 0;
virtual const smart_objects::SmartObjectSPtr vr_synonyms() const = 0;
virtual const std::string& mac_address() const = 0;
virtual const std::string& bundle_id() const = 0;
virtual void set_bundle_id(const std::string& bundle_id) = 0;
virtual std::string policy_app_id() const = 0;
virtual const smart_objects::SmartObject* tts_name() const = 0;
virtual const smart_objects::SmartObject* ngn_media_screen_name() const = 0;
virtual const smart_objects::SmartObjectSPtr tts_name() const = 0;
virtual const smart_objects::SmartObjectSPtr ngn_media_screen_name()
const = 0;
virtual const mobile_api::Language::eType& language() const = 0;
virtual const mobile_api::Language::eType& ui_language() const = 0;
virtual const utils::SemanticVersion& msg_version() const = 0;
Expand Down Expand Up @@ -195,18 +196,18 @@ typedef std::vector<smart_objects::SmartObjectSPtr> MobileMessageQueue;
class DynamicApplicationData {
public:
virtual ~DynamicApplicationData() {}
virtual const smart_objects::SmartObject* help_prompt() const = 0;
virtual const smart_objects::SmartObject* timeout_prompt() const = 0;
virtual const smart_objects::SmartObject* vr_help_title() const = 0;
virtual const smart_objects::SmartObject* vr_help() const = 0;
virtual const smart_objects::SmartObjectSPtr help_prompt() const = 0;
virtual const smart_objects::SmartObjectSPtr timeout_prompt() const = 0;
virtual const smart_objects::SmartObjectSPtr vr_help_title() const = 0;
virtual const smart_objects::SmartObjectSPtr vr_help() const = 0;
virtual const mobile_api::TBTState::eType& tbt_state() const = 0;
virtual const smart_objects::SmartObject* show_command() const = 0;
virtual const smart_objects::SmartObject* tbt_show_command() const = 0;
virtual const smart_objects::SmartObjectSPtr show_command() const = 0;
virtual const smart_objects::SmartObjectSPtr tbt_show_command() const = 0;
virtual DataAccessor<ButtonSubscriptions> SubscribedButtons() const = 0;
virtual const smart_objects::SmartObject* keyboard_props() const = 0;
virtual const smart_objects::SmartObject* menu_title() const = 0;
virtual const smart_objects::SmartObject* menu_icon() const = 0;
virtual const smart_objects::SmartObject* menu_layout() const = 0;
virtual const smart_objects::SmartObjectSPtr keyboard_props() const = 0;
virtual const smart_objects::SmartObjectSPtr menu_title() const = 0;
virtual const smart_objects::SmartObjectSPtr menu_icon() const = 0;
virtual const smart_objects::SmartObjectSPtr menu_layout() const = 0;
virtual smart_objects::SmartObject day_color_scheme() const = 0;
virtual smart_objects::SmartObject night_color_scheme() const = 0;
virtual std::string display_layout() const = 0;
Expand Down Expand Up @@ -558,8 +559,10 @@ class Application : public virtual InitialApplicationData,
* @brief Returns message belonging to the application
* that is currently executed (i.e. on HMI).
* @return smart_objects::SmartObject * Active message
* @deprecated will always return NULL
*/
virtual const smart_objects::SmartObject* active_message() const = 0;
DEPRECATED virtual const smart_objects::SmartObject* active_message()
const = 0;

/**
* @brief returns current hash value
Expand Down Expand Up @@ -615,7 +618,8 @@ class Application : public virtual InitialApplicationData,
*/
virtual void set_app_data_resumption_allowance(const bool allowed) = 0;

virtual void CloseActiveMessage() = 0;
// Deprecated, has no effect
DEPRECATED virtual void CloseActiveMessage() = 0;
virtual bool IsFullscreen() const = 0;
virtual void ChangeSupportingAppHMIType() = 0;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ class InitialApplicationDataImpl : public virtual Application {
InitialApplicationDataImpl();
~InitialApplicationDataImpl();

const smart_objects::SmartObject* app_types() const;
const smart_objects::SmartObject* vr_synonyms() const;
const smart_objects::SmartObjectSPtr app_types() const;
const smart_objects::SmartObjectSPtr vr_synonyms() const;
virtual std::string policy_app_id() const;
const smart_objects::SmartObject* tts_name() const;
const smart_objects::SmartObject* ngn_media_screen_name() const;
const smart_objects::SmartObjectSPtr tts_name() const;
const smart_objects::SmartObjectSPtr ngn_media_screen_name() const;
const mobile_api::Language::eType& language() const;
const mobile_api::Language::eType& ui_language() const;
const utils::SemanticVersion& msg_version() const;
Expand All @@ -73,11 +73,11 @@ class InitialApplicationDataImpl : public virtual Application {
mobile_api::LayoutMode::eType perform_interaction_layout() const OVERRIDE;

protected:
smart_objects::SmartObject* app_types_;
smart_objects::SmartObject* vr_synonyms_;
smart_objects::SmartObjectSPtr app_types_;
smart_objects::SmartObjectSPtr vr_synonyms_;
std::string mobile_app_id_;
smart_objects::SmartObject* tts_name_;
smart_objects::SmartObject* ngn_media_screen_name_;
smart_objects::SmartObjectSPtr tts_name_;
smart_objects::SmartObjectSPtr ngn_media_screen_name_;
mobile_api::Language::eType language_;
mobile_api::Language::eType ui_language_;
mobile_apis::LayoutMode::eType perform_interaction_layout_;
Expand All @@ -92,17 +92,17 @@ class DynamicApplicationDataImpl : public virtual Application {
typedef std::map<WindowID, smart_objects::SmartObject> AppWindowsTemplates;
DynamicApplicationDataImpl();
~DynamicApplicationDataImpl();
const smart_objects::SmartObject* help_prompt() const;
const smart_objects::SmartObject* timeout_prompt() const;
const smart_objects::SmartObject* vr_help_title() const;
const smart_objects::SmartObject* vr_help() const;
const smart_objects::SmartObjectSPtr help_prompt() const;
const smart_objects::SmartObjectSPtr timeout_prompt() const;
const smart_objects::SmartObjectSPtr vr_help_title() const;
const smart_objects::SmartObjectSPtr vr_help() const;
const mobile_api::TBTState::eType& tbt_state() const;
const smart_objects::SmartObject* show_command() const;
const smart_objects::SmartObject* tbt_show_command() const;
const smart_objects::SmartObject* keyboard_props() const;
const smart_objects::SmartObject* menu_title() const;
const smart_objects::SmartObject* menu_icon() const;
const smart_objects::SmartObject* menu_layout() const;
const smart_objects::SmartObjectSPtr show_command() const;
const smart_objects::SmartObjectSPtr tbt_show_command() const;
const smart_objects::SmartObjectSPtr keyboard_props() const;
const smart_objects::SmartObjectSPtr menu_title() const;
const smart_objects::SmartObjectSPtr menu_icon() const;
const smart_objects::SmartObjectSPtr menu_layout() const;

smart_objects::SmartObject day_color_scheme() const OVERRIDE;
smart_objects::SmartObject night_color_scheme() const OVERRIDE;
Expand Down Expand Up @@ -321,17 +321,17 @@ class DynamicApplicationDataImpl : public virtual Application {
bool is_choice_set_allowed(const uint32_t choice_set_id) const;

protected:
smart_objects::SmartObject* help_prompt_;
smart_objects::SmartObject* timeout_prompt_;
smart_objects::SmartObject* vr_help_title_;
smart_objects::SmartObject* vr_help_;
smart_objects::SmartObjectSPtr help_prompt_;
smart_objects::SmartObjectSPtr timeout_prompt_;
smart_objects::SmartObjectSPtr vr_help_title_;
smart_objects::SmartObjectSPtr vr_help_;
mobile_api::TBTState::eType tbt_state_;
smart_objects::SmartObject* show_command_;
smart_objects::SmartObject* keyboard_props_;
smart_objects::SmartObject* menu_title_;
smart_objects::SmartObject* menu_icon_;
smart_objects::SmartObject* menu_layout_;
smart_objects::SmartObject* tbt_show_command_;
smart_objects::SmartObjectSPtr show_command_;
smart_objects::SmartObjectSPtr keyboard_props_;
smart_objects::SmartObjectSPtr menu_title_;
smart_objects::SmartObjectSPtr menu_icon_;
smart_objects::SmartObjectSPtr menu_layout_;
smart_objects::SmartObjectSPtr tbt_show_command_;
smart_objects::SmartObjectSPtr display_capabilities_;
AppWindowsTemplates window_templates_;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ class ResumptionData {
* @return smartObject from pointer
*/
smart_objects::SmartObject PointerToSmartObj(
const smart_objects::SmartObject* ptr) const;
const smart_objects::SmartObjectSPtr ptr) const;

/**
* @brief creates smart object containing window info
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ void RCCommandRequest::Run() {
if (!policy_handler_.CheckHMIType(
app->policy_app_id(),
mobile_apis::AppHMIType::eType::REMOTE_CONTROL,
app->app_types())) {
app->app_types().get())) {
SDL_LOG_WARN("Application has no remote control functions");
SendResponse(false, mobile_apis::Result::DISALLOWED, "");
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,12 @@ class ButtonPressRequestTest
ON_CALL(mock_hmi_capabilities_, rc_capability())
.WillByDefault(Return(rc_capabilities_));
ON_CALL(*mock_app_, policy_app_id()).WillByDefault(Return(kPolicyAppId));
ON_CALL(mock_policy_handler_,
CheckHMIType(kPolicyAppId,
mobile_apis::AppHMIType::eType::REMOTE_CONTROL,
nullptr))
ON_CALL(*mock_app_, app_types())
.WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(
mock_policy_handler_,
CheckHMIType(
kPolicyAppId, mobile_apis::AppHMIType::eType::REMOTE_CONTROL, _))
.WillByDefault(Return(true));
ON_CALL(mock_allocation_manager_, is_rc_enabled())
.WillByDefault(Return(true));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ class GetInteriorVehicleDataRequestTest
smart_objects::SmartType::SmartType_Array)) {
ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
ON_CALL(*mock_app2_, app_id()).WillByDefault(Return(kAppId2));
ON_CALL(*mock_app_, app_types())
.WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(*mock_app2_, app_types())
.WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(*mock_app_, is_remote_control_supported())
.WillByDefault(Return(true));
ON_CALL(*mock_app2_, is_remote_control_supported())
Expand Down Expand Up @@ -158,8 +162,7 @@ class GetInteriorVehicleDataRequestTest
ON_CALL(mock_hmi_capabilities_, rc_capability())
.WillByDefault(Return(rc_capabilities_));
ON_CALL(mock_policy_handler_,
CheckHMIType(
_, mobile_apis::AppHMIType::eType::REMOTE_CONTROL, nullptr))
CheckHMIType(_, mobile_apis::AppHMIType::eType::REMOTE_CONTROL, _))
.WillByDefault(Return(true));
ON_CALL(mock_policy_handler_, CheckModule(_, _))
.WillByDefault(Return(true));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ class RCGetInteriorVehicleDataConsentTest
smart_objects::SmartObject control_caps((smart_objects::SmartType_Array));
(*rc_capabilities_)[strings::kradioControlCapabilities] = control_caps;
ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
ON_CALL(*mock_app_, app_types())
.WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(app_mngr_, hmi_interfaces())
.WillByDefault(ReturnRef(mock_hmi_interfaces_));
ON_CALL(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ class SetInteriorVehicleDataRequestTest
ON_CALL(mock_allocation_manager_, AcquireResource(_, _, _))
.WillByDefault(Return(AcquireResult::ALLOWED));
ON_CALL(*mock_app_, app_id()).WillByDefault(Return(kAppId));
ON_CALL(*mock_app_, app_types())
.WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(mock_policy_handler_,
CheckHMIType(kPolicyAppId,
mobile_apis::AppHMIType::eType::REMOTE_CONTROL,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,10 @@ class RegisterAppInterfaceRequestTest
ON_CALL(*mock_app, is_cloud_app()).WillByDefault(Return(false));
ON_CALL(*mock_app, hybrid_app_preference())
.WillByDefault(ReturnRef(kHybridAppPreference));
ON_CALL(*mock_app, vr_synonyms())
.WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(*mock_app, tts_name())
.WillByDefault(Return(std::shared_ptr<smart_objects::SmartObject>()));
ON_CALL(*mock_app, policy_app_id()).WillByDefault(Return(kAppId1));
ON_CALL(*mock_app, msg_version())
.WillByDefault(ReturnRef(mock_semantic_version));
Expand Down

0 comments on commit 6b423eb

Please sign in to comment.