@@ -2686,25 +2686,45 @@ Result<ConfigStore> ConfigStore::open(std::string_view name) {
26862686}
26872687
26882688Result<std::optional<HostString>> ConfigStore::get (std::string_view name) {
2689+ return this ->get (name, CONFIG_STORE_INITIAL_BUF_LEN);
2690+ }
2691+
2692+ Result<std::optional<HostString>> ConfigStore::get (std::string_view name,
2693+ uint32_t initial_buf_len) {
26892694 TRACE_CALL ()
26902695 Result<std::optional<HostString>> res;
26912696
2697+ uint32_t buf_len{initial_buf_len};
26922698 auto name_str = string_view_to_world_string (name);
26932699 fastly::fastly_world_string ret;
26942700 fastly::fastly_host_error err;
2695- ret.ptr = static_cast <uint8_t *>(cabi_malloc (CONFIG_STORE_ENTRY_MAX_LEN, 1 ));
2696- if (!convert_result (fastly::config_store_get (this ->handle , reinterpret_cast <char *>(name_str.ptr ),
2697- name_str.len , reinterpret_cast <char *>(ret.ptr ),
2698- CONFIG_STORE_ENTRY_MAX_LEN, &ret.len ),
2699- &err)) {
2701+
2702+ ret.ptr = static_cast <uint8_t *>(cabi_malloc (buf_len, 1 ));
2703+
2704+ bool succeeded{convert_result (
2705+ fastly::config_store_get (this ->handle , reinterpret_cast <char *>(name_str.ptr ), name_str.len ,
2706+ reinterpret_cast <char *>(ret.ptr ), buf_len, &ret.len ),
2707+ &err)};
2708+
2709+ if (!succeeded && err == FASTLY_HOST_ERROR_BUFFER_LEN) {
2710+ buf_len = ret.len ;
2711+ ret.len = 0 ;
2712+ ret.ptr = static_cast <uint8_t *>(cabi_realloc (ret.ptr , initial_buf_len, 1 , buf_len));
2713+ succeeded = convert_result (
2714+ fastly::config_store_get (this ->handle , reinterpret_cast <char *>(name_str.ptr ), name_str.len ,
2715+ reinterpret_cast <char *>(ret.ptr ), buf_len, &ret.len ),
2716+ &err);
2717+ }
2718+
2719+ if (!succeeded) {
27002720 cabi_free (ret.ptr );
27012721 if (error_is_optional_none (err)) {
27022722 res.emplace (std::nullopt );
27032723 } else {
27042724 res.emplace_err (err);
27052725 }
27062726 } else {
2707- ret.ptr = static_cast <uint8_t *>(cabi_realloc (ret.ptr , CONFIG_STORE_ENTRY_MAX_LEN , 1 , ret.len ));
2727+ ret.ptr = static_cast <uint8_t *>(cabi_realloc (ret.ptr , buf_len , 1 , ret.len ));
27082728 res.emplace (make_host_string (ret));
27092729 }
27102730
@@ -2842,25 +2862,41 @@ FastlyAsyncTask::Handle ObjectStorePendingDelete::async_handle() const {
28422862}
28432863
28442864Result<std::optional<HostBytes>> Secret::plaintext () const {
2865+ return this ->plaintext (CONFIG_STORE_INITIAL_BUF_LEN);
2866+ }
2867+
2868+ Result<std::optional<HostBytes>> Secret::plaintext (uint32_t initial_buf_len) const {
28452869 TRACE_CALL ()
28462870 Result<std::optional<HostBytes>> res;
28472871
2872+ uint32_t buf_len{initial_buf_len};
28482873 fastly::fastly_world_list_u8 ret;
28492874 fastly::fastly_host_error err;
2850- ret.ptr = static_cast <uint8_t *>(JS_malloc (CONTEXT, DICTIONARY_ENTRY_MAX_LEN));
2851- if (!convert_result (fastly::secret_store_plaintext (this ->handle ,
2852- reinterpret_cast <char *>(ret.ptr ),
2853- DICTIONARY_ENTRY_MAX_LEN, &ret.len ),
2854- &err)) {
2875+ ret.ptr = static_cast <uint8_t *>(JS_malloc (CONTEXT, buf_len));
2876+ bool succeeded{
2877+ convert_result (fastly::secret_store_plaintext (this ->handle , reinterpret_cast <char *>(ret.ptr ),
2878+ buf_len, &ret.len ),
2879+ &err)};
2880+
2881+ if (!succeeded && err == FASTLY_HOST_ERROR_BUFFER_LEN) {
2882+ buf_len = ret.len ;
2883+ ret.len = 0 ;
2884+ ret.ptr = static_cast <uint8_t *>(JS_realloc (CONTEXT, ret.ptr , initial_buf_len, buf_len));
2885+ succeeded =
2886+ convert_result (fastly::secret_store_plaintext (
2887+ this ->handle , reinterpret_cast <char *>(ret.ptr ), buf_len, &ret.len ),
2888+ &err);
2889+ }
2890+
2891+ if (!succeeded) {
28552892 if (error_is_optional_none (err)) {
28562893 res.emplace (std::nullopt );
28572894 } else {
28582895 JS_free (CONTEXT, ret.ptr );
28592896 res.emplace_err (err);
28602897 }
28612898 } else {
2862- ret.ptr =
2863- static_cast <uint8_t *>(JS_realloc (CONTEXT, ret.ptr , DICTIONARY_ENTRY_MAX_LEN, ret.len ));
2899+ ret.ptr = static_cast <uint8_t *>(JS_realloc (CONTEXT, ret.ptr , buf_len, ret.len ));
28642900 res.emplace (make_host_bytes (ret.ptr , ret.len ));
28652901 }
28662902
0 commit comments