diff --git a/kernel/src/los_queue.c b/kernel/src/los_queue.c index 686e5d14..5ae74611 100644 --- a/kernel/src/los_queue.c +++ b/kernel/src/los_queue.c @@ -244,6 +244,7 @@ static INLINE VOID OsQueueBufferOperate(LosQueueCB *queueCB, UINT32 operateType, } else { if (OS_QUEUE_IS_READ(operateType)) { msgDataSize = *((UINT32 *)(UINTPTR)((queueNode + queueCB->queueSize) - sizeof(UINT32))); + msgDataSize = (*bufferSize < msgDataSize) ? *bufferSize : msgDataSize; rc = memcpy_s((VOID *)bufferAddr, *bufferSize, (VOID *)queueNode, msgDataSize); if (rc != EOK) { PRINT_ERR("%s[%d] memcpy failed, error type = %u\n", __FUNCTION__, __LINE__, rc); @@ -268,9 +269,7 @@ static INLINE UINT32 OsQueueOperateParamCheck(const LosQueueCB *queueCB, UINT32 return LOS_ERRNO_QUEUE_NOT_CREATE; } - if (OS_QUEUE_IS_READ(operateType) && (*bufferSize < (queueCB->queueSize - sizeof(UINT32)))) { - return LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL; - } else if (OS_QUEUE_IS_WRITE(operateType) && (*bufferSize > (queueCB->queueSize - sizeof(UINT32)))) { + if (OS_QUEUE_IS_WRITE(operateType) && (*bufferSize > (queueCB->queueSize - sizeof(UINT32)))) { return LOS_ERRNO_QUEUE_WRITE_SIZE_TOO_BIG; } diff --git a/testsuites/sample/kernel/queue/It_los_queue_010.c b/testsuites/sample/kernel/queue/It_los_queue_010.c index ac3988a0..279f6253 100644 --- a/testsuites/sample/kernel/queue/It_los_queue_010.c +++ b/testsuites/sample/kernel/queue/It_los_queue_010.c @@ -48,7 +48,7 @@ static UINT32 Testcase(VOID) ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0); - ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL, ret, EXIT); + ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ret = LOS_QueueDelete(g_testQueueID01); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); diff --git a/testsuites/sample/kernel/queue/It_los_queue_011.c b/testsuites/sample/kernel/queue/It_los_queue_011.c index a677a908..9ab17e7f 100644 --- a/testsuites/sample/kernel/queue/It_los_queue_011.c +++ b/testsuites/sample/kernel/queue/It_los_queue_011.c @@ -47,7 +47,7 @@ static UINT32 Testcase(VOID) // 6, Set a value less than QUEUE_BASE_MSGSIZE, for test erro code LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL ret = LOS_QueueRead(g_testQueueID01, &buff2, 6, 0); - ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL, ret, EXIT); + ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ret = LOS_QueueDelete(g_testQueueID01); ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret); diff --git a/testsuites/sample/kernel/queue/It_los_queue_012.c b/testsuites/sample/kernel/queue/It_los_queue_012.c index b8d9636b..5f600352 100644 --- a/testsuites/sample/kernel/queue/It_los_queue_012.c +++ b/testsuites/sample/kernel/queue/It_los_queue_012.c @@ -45,9 +45,6 @@ static UINT32 Testcase(VOID) ret = LOS_QueueWrite(g_testQueueID01, buff1, QUEUE_BASE_MSGSIZE, 0); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); - ret = LOS_QueueRead(g_testQueueID01, &buff2, 7, 0); // 7, for boundary value test - ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL, ret, EXIT); - ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); // 6, to verify the correct value diff --git a/testsuites/sample/kernel/queue/It_los_queue_head_010.c b/testsuites/sample/kernel/queue/It_los_queue_head_010.c index 9e64a477..e701fa76 100644 --- a/testsuites/sample/kernel/queue/It_los_queue_head_010.c +++ b/testsuites/sample/kernel/queue/It_los_queue_head_010.c @@ -45,7 +45,7 @@ static UINT32 Testcase(VOID) ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ret = LOS_QueueRead(g_testQueueID01, &buff2, 6, 0); // 6 < QUEUE_BASE_MSGSIZE for erro code LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL - ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL, ret, EXIT); + ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); EXIT: ret = LOS_QueueDelete(g_testQueueID01); diff --git a/testsuites/sample/kernel/queue/It_los_queue_head_011.c b/testsuites/sample/kernel/queue/It_los_queue_head_011.c index 8ef62826..d9294736 100644 --- a/testsuites/sample/kernel/queue/It_los_queue_head_011.c +++ b/testsuites/sample/kernel/queue/It_los_queue_head_011.c @@ -45,9 +45,6 @@ static UINT32 Testcase(VOID) ret = LOS_QueueWriteHead(g_testQueueID01, buff1, QUEUE_BASE_MSGSIZE, 0); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); - ret = LOS_QueueRead(g_testQueueID01, &buff2, 7, 0); // 7, read size - ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL, ret, EXIT); - ret = LOS_QueueRead(g_testQueueID01, &buff2, QUEUE_BASE_MSGSIZE, 0); ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ICUNIT_GOTO_EQUAL(*((char *)(intptr_t)buff2 + 6), buff1[6], *((char *)(intptr_t)buff2 + 6), EXIT); // 6, In order to verify the content diff --git a/testsuites/sample/kernel/queue/It_los_queue_head_014.c b/testsuites/sample/kernel/queue/It_los_queue_head_014.c index 38d636e2..fe0a39f2 100644 --- a/testsuites/sample/kernel/queue/It_los_queue_head_014.c +++ b/testsuites/sample/kernel/queue/It_los_queue_head_014.c @@ -45,7 +45,7 @@ static UINT32 Testcase(VOID) ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); ret = LOS_QueueRead(g_testQueueID01, &buff2, 7, 0); // 7, buffer2 max - 1 - ICUNIT_GOTO_EQUAL(ret, LOS_ERRNO_QUEUE_READ_SIZE_TOO_SMALL, ret, EXIT); + ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT); EXIT: ret = LOS_QueueDelete(g_testQueueID01);