MmsFileService: Don't use file size on read

The size value shall be interpreted as an estimated file size and shall
not be used to determine absolute size.
pull/526/head
Denis Lazarev 11 months ago
parent 519b0208cc
commit 0593f348ea

@ -826,22 +826,14 @@ void
mmsMsg_createFileReadResponse(int maxPduSize, uint32_t invokeId, mmsMsg_createFileReadResponse(int maxPduSize, uint32_t invokeId,
ByteBuffer* response, MmsFileReadStateMachine* frsm) ByteBuffer* response, MmsFileReadStateMachine* frsm)
{ {
/* determine remaining bytes in file */
uint32_t bytesLeft = frsm->fileSize - frsm->readPosition;
uint32_t fileChunkSize = 0;
uint32_t maxFileChunkSize = maxPduSize - 20; uint32_t maxFileChunkSize = maxPduSize - 20;
uint32_t fileReadResponseSize = 1; /* for tag */ uint32_t fileReadResponseSize = 1; /* for tag */
bool moreFollows = true; bool moreFollows = true;
if (bytesLeft > maxFileChunkSize) { uint32_t fileChunkSize = FileSystem_readFile(frsm->fileHandle, response->buffer + 20, maxFileChunkSize);
fileChunkSize = maxFileChunkSize; if (fileChunkSize != maxFileChunkSize) {
}
else {
fileChunkSize = bytesLeft;
moreFollows = false; moreFollows = false;
fileReadResponseSize += 3; /* for moreFollows */ fileReadResponseSize += 3; /* for moreFollows */
} }
@ -869,7 +861,7 @@ mmsMsg_createFileReadResponse(int maxPduSize, uint32_t invokeId,
bufPos = BerEncoder_encodeTL(0x49, fileReadResponseSize, buffer, bufPos); bufPos = BerEncoder_encodeTL(0x49, fileReadResponseSize, buffer, bufPos);
bufPos = BerEncoder_encodeTL(0x80, fileChunkSize, buffer, bufPos); bufPos = BerEncoder_encodeTL(0x80, fileChunkSize, buffer, bufPos);
FileSystem_readFile(frsm->fileHandle, buffer + bufPos, fileChunkSize); memmove(buffer + bufPos, buffer + 20, fileChunkSize);
bufPos += fileChunkSize; bufPos += fileChunkSize;
if (!moreFollows) if (!moreFollows)

Loading…
Cancel
Save