From cbf315a78698c1772259bc02d60c880833812915 Mon Sep 17 00:00:00 2001 From: Nathanne Isip Date: Mon, 13 May 2024 15:30:35 +0800 Subject: [PATCH] Path sanitation on system call functionalities. --- src/rishka_syscalls.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/rishka_syscalls.cpp b/src/rishka_syscalls.cpp index 6e1295a..a90a711 100644 --- a/src/rishka_syscalls.cpp +++ b/src/rishka_syscalls.cpp @@ -437,22 +437,22 @@ void RishkaSyscall::Int::detach(RishkaVM* vm) { bool RishkaSyscall::FS::mkdir(RishkaVM* vm) { auto path = vm->getPointerParam(0); - return SD.mkdir(path); + return SD.mkdir(rishka_sanitize_path(vm->getWorkingDirectory(), path)); } bool RishkaSyscall::FS::rmdir(RishkaVM* vm) { auto path = vm->getPointerParam(0); - return SD.rmdir(path); + return SD.rmdir(rishka_sanitize_path(vm->getWorkingDirectory(), path)); } bool RishkaSyscall::FS::remove(RishkaVM* vm) { auto path = vm->getPointerParam(0); - return SD.remove(path); + return SD.remove(rishka_sanitize_path(vm->getWorkingDirectory(), path)); } bool RishkaSyscall::FS::exists(RishkaVM* vm) { auto path = vm->getPointerParam(0); - return SD.exists(path); + return SD.exists(rishka_sanitize_path(vm->getWorkingDirectory(), path)); } bool RishkaSyscall::FS::isfile(RishkaVM* vm) { @@ -470,8 +470,12 @@ uint8_t RishkaSyscall::FS::open(RishkaVM* vm) { auto mode = vm->getPointerParam(1); if(strcmp(mode, "n") == 0) - vm->fileHandles.add(SD.open(path)); - else vm->fileHandles.add(SD.open(path, mode)); + vm->fileHandles.add( + SD.open(rishka_sanitize_path(vm->getWorkingDirectory(), path)) + ); + else vm->fileHandles.add(SD.open( + rishka_sanitize_path(vm->getWorkingDirectory(), path), mode) + ); return vm->fileHandles.getSize() - 1; }