"Invalid filename size");
return (ARCHIVE_FATAL);
}
- if (rar->filename_allocated < filename_size+2) {
- rar->filename = realloc(rar->filename, filename_size+2);
+ if (rar->filename_allocated < filename_size * 2 + 2) {
+ rar->filename = realloc(rar->filename, filename_size * 2 + 2);
if (rar->filename == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Couldn't allocate memory.");
if (filename_size != strlen(filename))
{
unsigned char highbyte, flagbits, flagbyte, offset;
+ unsigned fn_end;
end = filename_size;
+ fn_end = filename_size * 2;
filename_size = 0;
offset = strlen(filename) + 1;
highbyte = *(p + offset++);
flagbits = 0;
flagbyte = 0;
- while (offset < end && filename_size < end)
+ while (offset < end && filename_size < fn_end)
{
if (!flagbits)
{
} else
extra = high = 0;
length = (length & 0x7f) + 2;
- while (length && filename_size < end) {
+ while (length && filename_size < fn_end) {
unsigned cp = filename_size >> 1;
filename[filename_size++] = high;
filename[filename_size++] = p[cp] + extra;
break;
}
}
- if (filename_size >= end) {
+ if (filename_size > fn_end) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Invalid filename");
return (ARCHIVE_FATAL);