[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 behaviour 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));      /*      */
}


No MISRA C:2012 Rules applicable to message 2778


See also:

QA·C Source Code Analyser 8.1
MISRA C:2012 Compliance Module 1.0
© 2012 Programming Research.
www.programmingresearch.com
Personality Groups | Glossary | Message Index | MISRA C:2012 Rule Index Contents