@@ -562,6 +562,29 @@ static int _testOutOfBoundsNvmReads(whClientContext* client,
562562 wh_Client_NvmReadResponse (client , & server_rc , & len , buffer ));
563563 WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_BADARGS );
564564
565+ /* Test with large offset (UINT16_MAX), should fail since offset >=
566+ * meta.len. Regression test for integer overflow safety in the
567+ * offset+len check */
568+ off = UINT16_MAX ;
569+ len = 1 ;
570+ WH_TEST_RETURN_ON_FAIL (wh_Client_NvmReadRequest (client , id , off , len ));
571+ WH_TEST_RETURN_ON_FAIL (wh_Server_HandleRequestMessage (server ));
572+ WH_TEST_RETURN_ON_FAIL (
573+ wh_Client_NvmReadResponse (client , & server_rc , & len , buffer ));
574+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_BADARGS );
575+
576+ /* Test clamping with offset at midpoint and len exceeding remaining object
577+ * size. Verifies the overflow-safe comparison (len > meta.len - offset)
578+ * correctly clamps when offset + len would exceed meta.len */
579+ off = meta .len / 2 ;
580+ len = meta .len ;
581+ WH_TEST_RETURN_ON_FAIL (wh_Client_NvmReadRequest (client , id , off , len ));
582+ WH_TEST_RETURN_ON_FAIL (wh_Server_HandleRequestMessage (server ));
583+ WH_TEST_RETURN_ON_FAIL (
584+ wh_Client_NvmReadResponse (client , & server_rc , & len , buffer ));
585+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_OK );
586+ WH_TEST_ASSERT_RETURN (len == meta .len - meta .len / 2 );
587+
565588 return WH_ERROR_OK ;
566589}
567590
0 commit comments