Examples of errors detected by the V780 diagnostic

V780. The object of non-passive (non-PDS) type cannot be used with the function.


Tizen

V780 The object 'my_voicedata' of a non-passive (non-PDS) type cannot be initialized using the memset function. ise-stt-mode.cpp 773


typedef struct _VoiceData VoiceData;

struct _VoiceData
{
  int voicefw_state;
  stt_h voicefw_handle;
  Evas_Object *naviframe;
  Evas_Object *layout_main;
  Evas_Object *progressbar;
  Evas_Object *scroller;
  Evas_Object *main_entry;
  Evas_Object *mic_button;
  SttStateVal state;
  char *kbd_lang;
  Ecore_Timer *start_timer;
  Ecore_Timer *refresh_timer;
  Ecore_Timer *progressbar_timer;
  Ecore_Timer *textblock_timer;
  Ecore_Timer *guide_text_timer;
  Ecore_Timer *btn_disabling_timer;
  Ecore_Timer *power_unlock_timer;
  Ecore_Timer *init_timer;

  std::vector<std::string> stt_results;                    // <=
  char *partial_result;
  int result_type;

  int disclaimer;

  is::stt::SttFeedback *sttfeedback;
  is::stt::SttManager *sttmanager;

  is::ui::WInputSttMicEffect *ieffect;
  is::ui::MicEffector *effector;
};

void show_voice_input(....)
{
  ....
  my_voicedata = (VoiceData*)malloc(sizeof(VoiceData));   // <=
  if (my_voicedata == NULL) {
    LOGD("%d::::Heap Overflow, ......!", __LINE__);
    return;
  }
  memset(my_voicedata, 0, sizeof(VoiceData));              // <=
  ....
}

void on_destroy(VoiceData *r_voicedata)
{
  ....
  VoiceData *voicedata = (VoiceData *)r_voicedata;
  ....
  free(voicedata);                                         // <=
}

An object is created by the malloc and memset functions and destroyed using the free function. The constructor for the object of the std::vector<std::string> is not called. Such an object cannot be used. The destructor is not called. At least there will be a memory leak. In general, there is no point in thinking how this code may work. There will be definitely undefined behavior.

Similar errors can be found in some other places:

  • V780 The object 'my_voicedata' of a non-passive (non-PDS) type cannot be initialized using the memset function. w-input-stt-ise.cpp 51

DeepSpeech

V780 The object '& params' of a non-passive (non-PDS) type cannot be initialized using the memset function. binary_format.cc 261


/* Not the best numbering system,
   but it grew this way for historical reasons
 * and I want to preserve existing binary files. */
typedef enum
{
  PROBING=0,
  REST_PROBING=1,
  TRIE=2,
  QUANT_TRIE=3,
  ARRAY_TRIE=4,
  QUANT_ARRAY_TRIE=5
}
ModelType;

....

struct FixedWidthParameters {
  unsigned char order;
  float probing_multiplier;
  // What type of model is this?
  ModelType model_type;
  // Does the end of the file
  // have the actual strings in the vocabulary?
  bool has_vocabulary;
  unsigned int search_version;
};

....

// Parameters stored in the header of a binary file.
struct Parameters {
  FixedWidthParameters fixed;
  std::vector<uint64_t> counts;
};

....

void BinaryFormat::FinishFile(....)
{
  ....
  // header and vocab share the same mmap.
  Parameters params = Parameters();
  memset(¶ms, 0, sizeof(Parameters)); // <=
  ....
}


Bugs Found

Checked Projects
410
Collected Errors
14 111
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →
Accept