mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-12-23 10:52:13 +00:00
libstrat: Allow nullptr buffers if 0 size. (closes #255)
This commit is contained in:
parent
78a47dba6d
commit
3ed239296a
2 changed files with 7 additions and 2 deletions
|
@ -46,6 +46,11 @@ LayeredRomFS::LayeredRomFS(std::shared_ptr<RomInterfaceStorage> s_r, std::shared
|
||||||
|
|
||||||
|
|
||||||
Result LayeredRomFS::Read(void *buffer, size_t size, u64 offset) {
|
Result LayeredRomFS::Read(void *buffer, size_t size, u64 offset) {
|
||||||
|
/* Size zero reads should always succeed. */
|
||||||
|
if (size == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Validate size. */
|
/* Validate size. */
|
||||||
u64 virt_size = (*this->p_source_infos)[this->p_source_infos->size() - 1].virtual_offset + (*this->p_source_infos)[this->p_source_infos->size() - 1].size;
|
u64 virt_size = (*this->p_source_infos)[this->p_source_infos->size() - 1].virtual_offset + (*this->p_source_infos)[this->p_source_infos->size() - 1].size;
|
||||||
if (offset >= virt_size) {
|
if (offset >= virt_size) {
|
||||||
|
|
|
@ -306,9 +306,9 @@ struct Validator {
|
||||||
static constexpr bool ValidateCommandArgument(IpcResponseContext *ctx, size_t& a_index, size_t& b_index, size_t& x_index, size_t& h_index, size_t& cur_c_size_offset, size_t& total_c_size) {
|
static constexpr bool ValidateCommandArgument(IpcResponseContext *ctx, size_t& a_index, size_t& b_index, size_t& x_index, size_t& h_index, size_t& cur_c_size_offset, size_t& total_c_size) {
|
||||||
constexpr ArgType argT = GetArgType<T>();
|
constexpr ArgType argT = GetArgType<T>();
|
||||||
if constexpr (argT == ArgType::InBuffer) {
|
if constexpr (argT == ArgType::InBuffer) {
|
||||||
return ctx->request.Buffers[a_index] != nullptr && ctx->request.BufferDirections[a_index] == BufferDirection_Send && ctx->request.BufferTypes[a_index++] == T::expected_type;
|
return (ctx->request.Buffers[a_index] != nullptr || ctx->request.BufferSizes[a_index] == 0) && ctx->request.BufferDirections[a_index] == BufferDirection_Send && ctx->request.BufferTypes[a_index++] == T::expected_type;
|
||||||
} else if constexpr (argT == ArgType::OutBuffer) {
|
} else if constexpr (argT == ArgType::OutBuffer) {
|
||||||
return ctx->request.Buffers[b_index] != nullptr && ctx->request.BufferDirections[b_index] == BufferDirection_Recv && ctx->request.BufferTypes[b_index++] == T::expected_type;
|
return (ctx->request.Buffers[b_index] != nullptr || ctx->request.BufferSizes[b_index] == 0) && ctx->request.BufferDirections[b_index] == BufferDirection_Recv && ctx->request.BufferTypes[b_index++] == T::expected_type;
|
||||||
} else if constexpr (argT == ArgType::InPointer) {
|
} else if constexpr (argT == ArgType::InPointer) {
|
||||||
return ctx->request.Statics[x_index++] != nullptr;
|
return ctx->request.Statics[x_index++] != nullptr;
|
||||||
} else if constexpr (argT == ArgType::InHandle) {
|
} else if constexpr (argT == ArgType::InHandle) {
|
||||||
|
|
Loading…
Reference in a new issue