Examples of errors detected by the V514 diagnostic.


V514. Dividing sizeof a pointer by another value. There is a probability of logical error presence.


Miranda IM

V514 Dividing sizeof a pointer 'sizeof (text)' by another value. There is a probability of logical error presence. clist_modern modern_cachefuncs.cpp 567


#define SIZEOF(X) (sizeof(X)/sizeof(X[0]))

int Cache_GetLineText(..., LPTSTR text, int text_size, ...)
{
  ...
  tmi.printDateTime(pdnce->hTimeZone, _T("t"), text,
                    SIZEOF(text), 0);
  ...
}

Most likely this is what should be written here: tmi.printDateTime(pdnce->hTimeZone, _T("t"), text, text_size, 0);


ReactOS

V514 Dividing sizeof a pointer 'sizeof (szText)' by another value. There is a probability of logical error presence. shell32 drive.c 126


VOID
GetDriveNameWithLetter(LPWSTR szText, UINT Length, WCHAR Drive)
{
  ...
  TempLength = LoadStringW(shell32_hInstance,
    IDS_DRIVE_FIXED, &szText[Length+1],
    (sizeof(szText)/sizeof(WCHAR))- Length - 2);
  ...
}

"sizeof(szText)/sizeof(WCHAR)" - the pointer size is divided by the WCHAR size. The programmer seems to have intended to do some different thing.


Notepad++

V514 Dividing sizeof a pointer 'sizeof (tvi.pszText)' by another value. There is a probability of logical error presence. Notepad++ treeview.cpp 88


typedef struct tagTVITEMA {
  ...
  LPSTR     pszText;
  ...
} TVITEMA, *LPTVITEMA;

#define TVITEM TVITEMA

HTREEITEM TreeView::addItem(....)
{
  TVITEM tvi;
  ...
  tvi.cchTextMax = sizeof(tvi.pszText)/sizeof(tvi.pszText[0]);
  ...
}

ReactOS

V514 Dividing sizeof a pointer 'sizeof (DosDevices.Buffer)' by another value. There is a probability of logical error presence. mountmgr.c 164


typedef struct _UNICODE_STRING {
  USHORT Length;
  USHORT MaximumLength;
  PWSTR  Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

UNICODE_STRING DosDevices =
  RTL_CONSTANT_STRING(L"\\DosDevices\\");

NTSTATUS CreateNewDriveLetterName(....)
{
  ....
  DriveLetter->Buffer[
    sizeof(DosDevices.Buffer) / sizeof(WCHAR)] =
      (WCHAR)Letter;
  ....
}

Similar errors can be found in some other places:

  • V514 Dividing sizeof a pointer 'sizeof (DosDevices.Buffer)' by another value. There is a probability of logical error presence. mountmgr.c 190
  • V514 Dividing sizeof a pointer 'sizeof (DosDevices.Buffer)' by another value. There is a probability of logical error presence. symlink.c 937

OpenMS

V514 Dividing sizeof a pointer 'sizeof (header)' by another value. There is a probability of logical error presence. compressedinputsource.c 52


CompressedInputSource::CompressedInputSource(
  const String & file_path, const char * header,
  MemoryManager * const manager)
  : xercesc::InputSource(manager)
{
  if (sizeof(header) / sizeof(char) > 1)
  {
    head_[0] = header[0];
    head_[1] = header[1];
  }
  else
  {
    head_[0] = '\0';
    head_[1] = '\0';
  }
  ....
}

Similar errors can be found in some other places:

  • V514 Dividing sizeof a pointer 'sizeof (header)' by another value. There is a probability of logical error presence. compressedinputsource.c 104

OpenCOLLADA

V514 Dividing sizeof a pointer 'sizeof (objectGroups)' by another value. There is a probability of logical error presence. mayadmdagnode.h 40


struct ObjectGroups{
  componentList objectGrpCompList;
  int objectGroupId;
  short objectGrpColor;
  void write(FILE* file) const;
}* objectGroups;

void write(FILE* file) const
{
  size_t size = sizeof(objectGroups)/sizeof(ObjectGroups);
  for(size_t i=0; i<size; ++i)
  {
    objectGroups[i].write(file);
    if(i+1<size) fprintf(file," ");
  }
}

Similar errors can be found in some other places:

  • V514 Dividing sizeof a pointer 'sizeof (compObjectGroups)' by another value. There is a probability of logical error presence. mayadmgeometryshape.h 33
  • V514 Dividing sizeof a pointer 'sizeof (uvSetPoints)' by another value. There is a probability of logical error presence. mayadmcontrolpoint.h 27
  • V514 Dividing sizeof a pointer 'sizeof (colorSetPoints)' by another value. There is a probability of logical error presence. mayadmcontrolpoint.h 59
  • And 10 additional diagnostic messages.

Scilab

V514 Dividing sizeof a pointer 'sizeof dictionary' by another value. There is a probability of logical error presence. getcommonpart.c 76


void qsort(
  void *base,
  size_t num,     // Array size in elements.
  size_t width,   // Element size in bytes.
  int (__cdecl *compare )(const void *, const void *)
);

char *getCommonPart(char **dictionary, int sizeDictionary)
{
  ....
  char *currentstr = dictionary[0];
  qsort(dictionary, sizeof dictionary / sizeof dictionary[0],
        sizeof dictionary[0], cmp);
  ....
}

Similar errors can be found in some other places:

  • V514 Dividing sizeof a pointer 'sizeof dictionary' by another value. There is a probability of logical error presence. getfilesdictionary.c 105

Miranda NG

V514 Dividing sizeof a pointer 'sizeof (dbv.ptszVal)' by another value. There is a probability of logical error presence. TranslitSwitcher layoutproc.cpp 827


#define SIZEOF(X) (sizeof(X)/sizeof(X[0]))

TCHAR *ptszVal;

int OnButtonPressed(WPARAM wParam, LPARAM lParam)
{
  ....
  int FinalLen = slen + SIZEOF(dbv.ptszVal) + 1;
  ....
}

Most likely this is what should be written here: int FinalLen = slen + _tstrlen(dbv.ptszVal) + 1;

Similar errors can be found in some other places:

  • V514 Dividing sizeof a pointer 'sizeof (dbv.ptszVal)' by another value. There is a probability of logical error presence. TranslitSwitcher layoutproc.cpp 876
  • V514 Dividing sizeof a pointer 'sizeof (dbv.ptszVal)' by another value. There is a probability of logical error presence. TranslitSwitcher layoutproc.cpp 924
  • V514 Dividing sizeof a pointer 'sizeof (tmp)' by another value. There is a probability of logical error presence. New_GPG main.cpp 1300


Do you make errors in the code?

Check your code
with PVS-Studio

Static code analysis
for C, C++, and C#

goto PVS-Studio;