Ver Fonte

component/bt: fix nvs_get_str_or_blob length output error

baohongde há 8 anos atrás
pai
commit
f3be0395d2

+ 3 - 0
components/nvs_flash/src/nvs_api.cpp

@@ -400,7 +400,10 @@ static esp_err_t nvs_get_str_or_blob(nvs_handle handle, nvs::ItemType type, cons
     } else if (*length < dataSize) {
         *length = dataSize;
         return ESP_ERR_NVS_INVALID_LENGTH;
+    } else if (*length > dataSize) {
+	*length = dataSize;
     }
+    
 
     return entry.mStoragePtr->readItem(entry.mNsIndex, type, key, out_value, dataSize);
 }

+ 4 - 0
components/nvs_flash/test_nvs_host/test_nvs.cpp

@@ -530,6 +530,10 @@ TEST_CASE("nvs api tests", "[nvs]")
     TEST_ESP_ERR(ESP_ERR_NVS_INVALID_LENGTH, nvs_get_str(handle_2, "key", buf, &buf_len_short));
     CHECK(buf_len_short == buf_len);
     
+    size_t buf_len_long = buf_len + 1;
+    TEST_ESP_OK(nvs_get_str(handle_2, "key", buf, &buf_len_long));
+    CHECK(buf_len_long == buf_len);
+
     TEST_ESP_OK(nvs_get_str(handle_2, "key", buf, &buf_len));
 
     CHECK(0 == strcmp(buf, str));