Let's avoid calling Read() with zero-sized buffer, to avoid needless firmware
quirkiness.
See: #25911
if (err != EFI_SUCCESS)
return err;
+ if (info->FileSize == 0) /* Automatically skip over empty files */
+ continue;
+
UINTN new_size, read_size = info->FileSize;
if (__builtin_add_overflow(size, read_size, &new_size))
return EFI_OUT_OF_RESOURCES;
UINTN extra = size % sizeof(char16_t) + sizeof(char16_t);
buf = xmalloc(size + extra);
- err = handle->Read(handle, &size, buf);
- if (err != EFI_SUCCESS)
- return err;
+ if (size > 0) {
+ err = handle->Read(handle, &size, buf);
+ if (err != EFI_SUCCESS)
+ return err;
+ }
/* Note that handle->Read() changes size to reflect the actually bytes read. */
memset(buf + size, 0, extra);