Unicorn with delicious cookie
Nous utilisons des cookies pour améliorer votre expérience de navigation. En savoir plus
Accepter
to the top
>
>
>
Examples of errors detected by the V780…

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(&params, 0, sizeof(Parameters)); // <=
  ....
}

Godot Engine

V780 Instantiation of LocalVector < AnimationCompressionDataState >: The object 'w' of a non-passive (non-PDS) type cannot be copied using the memcpy function. local_vector.h 280


template <class T, class U = uint32_t,
          bool force_trivial = false, bool tight = false>
class LocalVector
{
  ....
public:
  operator Vector<T>() const
  {
    Vector<T> ret;
    ret.resize(size());
    T *w = ret.ptrw();
    memcpy(w, data, sizeof(T) * count); // <=
    return ret;
  }
  ....
  _FORCE_INLINE_ LocalVector(const LocalVector &p_from) { .... }
  ....
};

struct AnimationCompressionDataState
{
  uint32_t components = 3;
  LocalVector<uint8_t> data; // Committed packets.
  struct PacketData
  {
    int32_t data[3] = { 0, 0, 0 };
    uint32_t frame = 0;
  };

  float split_tolerance = 1.5;

  LocalVector<PacketData> temp_packets;

  // used for rollback if the new frame does not fit
  int32_t validated_packet_count = -1;
  ....
};

The class AnimationCompressionDataState contains an instance of LocalVector<uint8_t>, which has a non-trivial copy constructor. Therefore, AnimationCompressionDataState itself is non-trivially copyable. If the objects passed to memcpy are potentially-overlapping or not TriviallyCopyable, the behavior of 'memcpy' is not specified and may be undefined.

Similar errors can be found in some other places:

  • V780 Instantiation of LocalVector < LocalVector <int> >: The object 'w' of a non-passive (non-PDS) type cannot be copied using the memcpy function. local_vector.h 280
  • V780 Instantiation of LocalVector < Mapping, uint32_t, bool, bool >: The object 'w' of a non-passive (non-PDS) type cannot be copied using the memcpy function. local_vector.h 280
  • V780 Instantiation of LocalVector < OAHashMap < uint64_t, Specialization > >: The object 'w' of a non-passive (non-PDS) type cannot be copied using the memcpy function. local_vector.h 280
  • And 1 additional diagnostic messages.

Xenia

V780 The object 'out_info' of a non-passive (non-PDS) type cannot be initialized using the memset function. filesystem_win.cc 209


struct FileInfo
{
  enum class Type
  {
    kFile,
    kDirectory,
  };
  Type type;
  std::filesystem::path name;
  std::filesystem::path path;
  size_t total_size;
  uint64_t create_timestamp;
  uint64_t access_timestamp;
  uint64_t write_timestamp;
};

bool GetInfo(const std::filesystem::path& path, FileInfo* out_info)
{
  std::memset(out_info, 0, sizeof(FileInfo));                       // <=
  ....
  if (....) return false;
  /* fill 'out_info' data members */
  return true;
}

An object of the 'FileInfo' type is passed to the memset function as an argument. This type contains data members of the 'std::filesystem::path' type, which isn't trivially copyable. Using such data in the memset function may lead to undefined behavior.


close form

Remplissez le formulaire ci‑dessous en 2 étapes simples :

Vos coordonnées :

Étape 1
Félicitations ! Voici votre code promo !

Type de licence souhaité :

Étape 2
Team license
Enterprise licence
** En cliquant sur ce bouton, vous déclarez accepter notre politique de confidentialité
close form
Demandez des tarifs
Nouvelle licence
Renouvellement de licence
--Sélectionnez la devise--
USD
EUR
* En cliquant sur ce bouton, vous déclarez accepter notre politique de confidentialité

close form
La licence PVS‑Studio gratuit pour les spécialistes Microsoft MVP
close form
Pour obtenir la licence de votre projet open source, s’il vous plait rempliez ce formulaire
* En cliquant sur ce bouton, vous déclarez accepter notre politique de confidentialité

close form
I want to join the test
* En cliquant sur ce bouton, vous déclarez accepter notre politique de confidentialité

close form
check circle
Votre message a été envoyé.

Nous vous répondrons à


Si l'e-mail n'apparaît pas dans votre boîte de réception, recherchez-le dans l'un des dossiers suivants:

  • Promotion
  • Notifications
  • Spam