char *data;
{
size_t header_size;
+ ssize_t remain_size;
ssize_t extend_size;
int checksum;
int name_length;
hdr->header_size = header_size = get_byte();
checksum = get_byte();
- if (fread(data + COMMON_HEADER_SIZE,
- header_size + 2 - COMMON_HEADER_SIZE, 1, fp) == 0) {
+ /* The data variable has been already read as COMMON_HEADER_SIZE bytes.
+ So we must read the remaining header size by the header_size. */
+ remain_size = header_size + 2 - COMMON_HEADER_SIZE;
+ if (remain_size <= 0) {
+ error("Invalid header size (LHarc file ?)");
+ return FALSE;
+ }
+ if (fread(data + COMMON_HEADER_SIZE, remain_size, 1, fp) == 0) {
error("Invalid header (LHarc file ?)");
return FALSE; /* finish */
}
char *data;
{
size_t header_size;
+ ssize_t remain_size;
ssize_t extend_size;
int checksum;
int name_length;
hdr->header_size = header_size = get_byte();
checksum = get_byte();
- if (fread(data + COMMON_HEADER_SIZE,
- header_size + 2 - COMMON_HEADER_SIZE, 1, fp) == 0) {
+ /* The data variable has been already read as COMMON_HEADER_SIZE bytes.
+ So we must read the remaining header size by the header_size. */
+ remain_size = header_size + 2 - COMMON_HEADER_SIZE;
+ if (remain_size <= 0) {
+ error("Invalid header size (LHarc file ?)");
+ return FALSE;
+ }
+ if (fread(data + COMMON_HEADER_SIZE, remain_size, 1, fp) == 0) {
error("Invalid header (LHarc file ?)");
return FALSE; /* finish */
}