diff --git a/nx/include/switch/services/ncm.h b/nx/include/switch/services/ncm.h index 411b0f5c..1d0f7db3 100644 --- a/nx/include/switch/services/ncm.h +++ b/nx/include/switch/services/ncm.h @@ -54,14 +54,14 @@ typedef struct { u8 c[0x10]; } NcmRightsId; -Result ncmInitialize(); -void ncmExit(); +Result ncmInitialize(void); +void ncmExit(void); Result ncmOpenContentStorage(FsStorageId storage, NcmContentStorage* out); Result ncmOpenContentMetaDatabase(FsStorageId storage, NcmContentMetaDatabase* out); Result ncmContentStorageHas(NcmContentStorage* cs, const NcmNcaId* ncaId, bool* out); -Result ncmContentStorageGetPath(NcmContentStorage* cs, const NcmNcaId* ncaId, char* out); +Result ncmContentStorageGetPath(NcmContentStorage* cs, const NcmNcaId* ncaId, char* out, size_t outSize); Result ncmContentStorageGetSize(NcmContentStorage* cs, const NcmNcaId* ncaId, u64* out); Result ncmContentStorageReadContentIdFile(NcmContentStorage* cs, const NcmNcaId* ncaId, u64 offset, void* outBuf, size_t bufSize); Result ncmContentStorageGetRightsIdFromContentId(NcmContentStorage* cs, const NcmNcaId* ncaId, NcmRightsId* rightsIdOut, u32* keyGenerationOut); @@ -74,4 +74,4 @@ Result ncmContentMetaDatabaseListContentInfo(NcmContentMetaDatabase* db, const N Result ncmContentMetaDatabaseGetLatestContentMetaKey(NcmContentMetaDatabase* db, u64 titleId, NcmMetaRecord* out); Result ncmContentMetaDatabaseListApplication(NcmContentMetaDatabase* db, u8 filter, NcmApplicationContentMetaKey* outBuf, size_t outBufSize, u32* numEntriesWritten, u32* numEntriesTotal); Result ncmContentMetaDatabaseHas(NcmContentMetaDatabase* db, const NcmMetaRecord* record, bool* out); -Result ncmContentMetaDatabaseCommit(NcmContentMetaDatabase* db); \ No newline at end of file +Result ncmContentMetaDatabaseCommit(NcmContentMetaDatabase* db); diff --git a/nx/source/services/ncm.c b/nx/source/services/ncm.c index a115c054..b86e4f3f 100644 --- a/nx/source/services/ncm.c +++ b/nx/source/services/ncm.c @@ -1,5 +1,5 @@ -#include "services/ncm.h" #include +#include "services/ncm.h" #include "arm/atomics.h" static Service g_ncmSrv; @@ -129,11 +129,11 @@ Result ncmContentStorageHas(NcmContentStorage* cs, const NcmNcaId* ncaId, bool* return rc; } -Result ncmContentStorageGetPath(NcmContentStorage* cs, const NcmNcaId* ncaId, char* out) { +Result ncmContentStorageGetPath(NcmContentStorage* cs, const NcmNcaId* ncaId, char* out, size_t outSize) { char out_path[FS_MAX_PATH] = {0}; IpcCommand c; ipcInitialize(&c); - ipcAddRecvStatic(&c, out_path, FS_MAX_PATH, 0); + ipcAddRecvStatic(&c, out_path, FS_MAX_PATH - 1, 0); struct { u64 magic; @@ -160,7 +160,8 @@ Result ncmContentStorageGetPath(NcmContentStorage* cs, const NcmNcaId* ncaId, ch rc = resp->result; if (R_SUCCEEDED(rc)) { - strncpy(out, out_path, FS_MAX_PATH); + if (outSize > FS_MAX_PATH - 1) outSize = FS_MAX_PATH - 1; + strncpy(out, out_path, outSize); } } @@ -270,7 +271,7 @@ Result ncmContentStorageGetRightsIdFromContentId(NcmContentStorage* cs, const Nc rc = resp->result; if (R_SUCCEEDED(rc)) { - memcpy(rightsIdOut, &resp->rights_id, sizeof(NcmRightsId)); + if (rightsIdOut) memcpy(rightsIdOut, &resp->rights_id, sizeof(NcmRightsId)); if (keyGenerationOut) *keyGenerationOut = resp->key_generation; } } @@ -604,4 +605,4 @@ Result ncmContentMetaDatabaseCommit(NcmContentMetaDatabase* db) { } return rc; -} \ No newline at end of file +}