Always return an error code if the supplied memory buffer is too small.
This commit is contained in:
parent
330e6a07ad
commit
4142431b36
@ -157,8 +157,10 @@ reefnet_sensuspro_handshake (sensuspro *device, unsigned char *data, unsigned in
|
||||
serial_set_break (device->port, 0);
|
||||
|
||||
// Verify the checksum of the handshake packet.
|
||||
unsigned short crc = handshake[10] + (handshake[11] << 8);
|
||||
unsigned short ccrc = reefnet_sensuspro_checksum (handshake, sizeof (handshake) - 2);
|
||||
unsigned short crc =
|
||||
handshake[REEFNET_SENSUSPRO_HANDSHAKE_SIZE + 0] +
|
||||
(handshake[REEFNET_SENSUSPRO_HANDSHAKE_SIZE + 1] << 8);
|
||||
unsigned short ccrc = reefnet_sensuspro_checksum (handshake, REEFNET_SENSUSPRO_HANDSHAKE_SIZE);
|
||||
if (crc != ccrc) {
|
||||
WARNING ("Unexpected answer CRC.");
|
||||
return REEFNET_ERROR_PROTOCOL;
|
||||
@ -178,10 +180,12 @@ reefnet_sensuspro_handshake (sensuspro *device, unsigned char *data, unsigned in
|
||||
handshake[6] + (handshake[7] << 8) + (handshake[8] << 16) + (handshake[9] << 24));
|
||||
#endif
|
||||
|
||||
if (size >= sizeof (handshake) - 2)
|
||||
memcpy (data, handshake, sizeof (handshake) - 2);
|
||||
else
|
||||
if (size >= REEFNET_SENSUSPRO_HANDSHAKE_SIZE) {
|
||||
memcpy (data, handshake, REEFNET_SENSUSPRO_HANDSHAKE_SIZE);
|
||||
} else {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return REEFNET_ERROR_MEMORY;
|
||||
}
|
||||
|
||||
serial_sleep (10);
|
||||
|
||||
@ -227,10 +231,12 @@ reefnet_sensuspro_read (sensuspro *device, unsigned char *data, unsigned int siz
|
||||
return REEFNET_ERROR_PROTOCOL;
|
||||
}
|
||||
|
||||
if (size >= REEFNET_SENSUSPRO_MEMORY_SIZE)
|
||||
if (size >= REEFNET_SENSUSPRO_MEMORY_SIZE) {
|
||||
memcpy (data, answer, REEFNET_SENSUSPRO_MEMORY_SIZE);
|
||||
else
|
||||
} else {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return REEFNET_ERROR_MEMORY;
|
||||
}
|
||||
|
||||
return REEFNET_SUCCESS;
|
||||
}
|
||||
|
||||
@ -291,10 +291,12 @@ reefnet_sensusultra_handshake (sensusultra *device, unsigned char *data, unsigne
|
||||
handshake[22] + (handshake[23] << 8));
|
||||
#endif
|
||||
|
||||
if (size >= REEFNET_SENSUSULTRA_HANDSHAKE_SIZE)
|
||||
if (size >= REEFNET_SENSUSULTRA_HANDSHAKE_SIZE) {
|
||||
memcpy (data, handshake, REEFNET_SENSUSULTRA_HANDSHAKE_SIZE);
|
||||
else
|
||||
} else {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return REEFNET_ERROR_MEMORY;
|
||||
}
|
||||
|
||||
return REEFNET_SUCCESS;
|
||||
}
|
||||
@ -332,10 +334,12 @@ reefnet_sensusultra_page (sensusultra *device, unsigned char *data, unsigned int
|
||||
return REEFNET_ERROR_PROTOCOL;
|
||||
}
|
||||
|
||||
if (size >= REEFNET_SENSUSULTRA_PACKET_SIZE)
|
||||
if (size >= REEFNET_SENSUSULTRA_PACKET_SIZE) {
|
||||
memcpy (data, package + 2, REEFNET_SENSUSULTRA_PACKET_SIZE);
|
||||
else
|
||||
} else {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return REEFNET_ERROR_MEMORY;
|
||||
}
|
||||
|
||||
return REEFNET_SUCCESS;
|
||||
}
|
||||
@ -520,10 +524,12 @@ reefnet_sensusultra_sense (sensusultra *device, unsigned char *data, unsigned in
|
||||
if (rc != REEFNET_SUCCESS)
|
||||
return rc;
|
||||
|
||||
if (size >= REEFNET_SENSUSULTRA_SENSE_SIZE)
|
||||
if (size >= REEFNET_SENSUSULTRA_SENSE_SIZE) {
|
||||
memcpy (data, package, REEFNET_SENSUSULTRA_SENSE_SIZE);
|
||||
else
|
||||
} else {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return REEFNET_ERROR_MEMORY;
|
||||
}
|
||||
|
||||
return REEFNET_SUCCESS;
|
||||
}
|
||||
|
||||
@ -233,10 +233,12 @@ uwatec_memomouse_read_packet_outer (memomouse *device, unsigned char data[], uns
|
||||
message ("\"\n");
|
||||
#endif
|
||||
|
||||
if (size >= rc)
|
||||
if (size >= rc) {
|
||||
memcpy (data, package + 1, rc);
|
||||
else
|
||||
} else {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return UWATEC_ERROR_MEMORY;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
@ -305,10 +307,12 @@ uwatec_memomouse_read_packet_inner (memomouse *device, unsigned char data[], uns
|
||||
}
|
||||
|
||||
// Copy the package to the output buffer.
|
||||
if (total - 3 <= size)
|
||||
if (total - 3 <= size) {
|
||||
memcpy (data, buffer + 1, total - 3);
|
||||
else
|
||||
} else {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return UWATEC_ERROR_MEMORY;
|
||||
}
|
||||
|
||||
free (buffer);
|
||||
|
||||
|
||||
@ -321,8 +321,8 @@ uwatec_smart_read (smart *device, unsigned char data[], unsigned int size)
|
||||
if (length <= size) {
|
||||
memcpy (data, package, length);
|
||||
} else {
|
||||
message ("Insufficient buffer space available.\n");
|
||||
memcpy (data, package, size);
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return UWATEC_ERROR_MEMORY;
|
||||
}
|
||||
|
||||
free (package);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user