From 3f3c14b8a1191aba297468aff026d3fcbbd2ad7e Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Wed, 15 Aug 2018 21:56:36 -0500 Subject: [PATCH] Do sanity checks of input values for Driver_Read. --- driver.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/driver.c b/driver.c index 303f388..46f87cc 100644 --- a/driver.c +++ b/driver.c @@ -311,12 +311,26 @@ static Word DoRead(struct GSOSDP *dp) { return drvrOffLine; } - //TODO check size is multiple of a block //TODO disk-switched logic unsigned long readStart = dp->blockNum * dp->blockSize + sess->dataOffset; unsigned long readEnd = readStart + dp->requestCount - 1; + /* Do sanity checks of input values */ + if (dp->blockSize == 0) { + dp->transferCount = 0; + return drvrBadBlock; + } + if (dp->requestCount % dp->blockSize != 0) { + dp->transferCount = 0; + return drvrBadCount; + } + if (readEnd < readStart || readStart / dp->blockSize != dp->blockNum) + { + dp->transferCount = 0; + return drvrBadBlock; + } + enum NetDiskError err = DoHTTPRequest(sess, readStart, readEnd); if (err != OPERATION_SUCCESSFUL) { dp->transferCount = 0;