[previous] 2778 [next] Suspicious: Copy between overlapping objects.
Pointers

Dataflow analysis has identified a code construct which is suspicious. Examination of the context indicates that an operation is being performed which could attempt to copy data between two objects which overlap in memory. The behavior will be undefined. It may be advisable to use the function 'memmove' instead.

For example, in the code below, the buffers addressed by pointers 'p1' and 'p2' will overlap if the value of the function parameter 'n' exceeds '3',


/*PRQA S 315,702,1253,2017,2211,3120,3132,3227,3408,3447 ++ */

#include <string.h>

extern int buf1[10];

extern void f2778(int p)
{
    int * p1;
    int * p2;
    unsigned int n = 4;
    int i;

    p1 = buf1;
    p2 = &buf1[3];

    for (i = 0; i < p; ++i)
    {
        --n;
    }

    (void)memcpy (p1, p2, n * sizeof(int));      /* 2778 */
    (void)memmove(p1, p2, n * sizeof(int));      /*      */
}

See also:

QA·C Source Code Analyser 8.1.2
© 2013 Programming Research.
www.programmingresearch.com
Personality Groups | Glossary | Message Index Contents