@@ -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