Antecedentes: Tengo una pequeña rutina que imita a fgets(character, 2, fp)
, excepto que toma un carácter de una cadena en lugar de una secuencia. newBuff se asigna dinámicamente a la cadena pasada como parámetro y el carácter se declara como char character[2]
.Valgrind Advertencia: Debería tomarlo en serio
rutina:
character[0] = newBuff[0];
character[1] = '\0';
strcpy(newBuff, newBuff+1);
El strcpy replica la pérdida de información ya que cada personaje se lee de la misma.
Problema: Valgrind hace me advierte sobre esta actividad, "Origen y destino superposición en strcpy (0x419b818, 0x419b819)".
¿Debo preocuparme por esta advertencia?
Incluso si el orden es de izquierda a derecha, podría haber problemas debido al desenrollado/reordenamiento y unidades de copia más grandes que el byte. Considero que este uso de 'strcpy' es altamente inseguro y es probable que se reparta entre diferentes versiones de la misma biblioteca, o incluso diferentes compilaciones con compiladores diferentes. –
@R .. Estoy de acuerdo, especialmente con el punto sobre las unidades más grandes que el byte. Para que quede claro, acepto que el código es incorrecto y debe cambiarse. – asveikau