wpa_supplicant(hidl): Fix pin string generation

Moved all of these conversions to a utility in misc_utils. The previous
conversion method was not modifying the string.size() param and hence
the written string was lost.

Bug: 34714021
Test: Able to initiate WPS display requests from framework now.
Change-Id: Id4d48010402c13d9d78ef5d209dbbaff7a80f954
diff --git a/wpa_supplicant/hidl/hidl_manager.cpp b/wpa_supplicant/hidl/hidl_manager.cpp
index 39d1b72..861f489 100644
--- a/wpa_supplicant/hidl/hidl_manager.cpp
+++ b/wpa_supplicant/hidl/hidl_manager.cpp
@@ -1232,10 +1232,8 @@
 
 	std::string hidl_generated_pin;
 	if (generated_pin > 0) {
-		hidl_generated_pin.reserve(9);
-		os_snprintf(
-		    &hidl_generated_pin[0], hidl_generated_pin.size(), "%08d",
-		    generated_pin);
+		hidl_generated_pin =
+		    misc_utils::convertWpsPinToString(generated_pin);
 	}
 	bool hidl_is_request = (request == 1 ? true : false);
 
diff --git a/wpa_supplicant/hidl/misc_utils.h b/wpa_supplicant/hidl/misc_utils.h
index fb8b86f..354ec32 100644
--- a/wpa_supplicant/hidl/misc_utils.h
+++ b/wpa_supplicant/hidl/misc_utils.h
@@ -15,6 +15,7 @@
 }
 
 namespace {
+constexpr size_t kWpsPinNumDigits = 8;
 // Custom deleter for wpabuf.
 void freeWpaBuf(wpabuf *ptr) { wpabuf_free(ptr); }
 }  // namespace
@@ -53,6 +54,14 @@
 	}
 }
 
+// Returns a string holding the wps pin.
+inline std::string convertWpsPinToString(int pin)
+{
+	char pin_str[kWpsPinNumDigits + 1];
+	snprintf(pin_str, sizeof(pin_str), "%08d", pin);
+	return pin_str;
+}
+
 }  // namespace misc_utils
 }  // namespace implementation
 }  // namespace V1_0
diff --git a/wpa_supplicant/hidl/p2p_iface.cpp b/wpa_supplicant/hidl/p2p_iface.cpp
index d71bc71..86f6f8f 100644
--- a/wpa_supplicant/hidl/p2p_iface.cpp
+++ b/wpa_supplicant/hidl/p2p_iface.cpp
@@ -696,8 +696,7 @@
 	std::string pin_ret;
 	if (provision_method == WpsProvisionMethod::DISPLAY &&
 	    pre_selected_pin.empty()) {
-		pin_ret.reserve(9);
-		os_snprintf(&pin_ret[0], pin_ret.size(), "%08d", new_pin);
+		pin_ret = misc_utils::convertWpsPinToString(new_pin);
 	}
 	return {{SupplicantStatusCode::SUCCESS, ""}, pin_ret};
 }
@@ -1058,10 +1057,8 @@
 	if (pin < 0) {
 		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, ""};
 	}
-	std::string pin_str;
-	pin_str.reserve(9);
-	snprintf(&pin_str[0], pin_str.size(), "%08d", pin);
-	return {{SupplicantStatusCode::SUCCESS, ""}, pin_str};
+	return {{SupplicantStatusCode::SUCCESS, ""},
+		misc_utils::convertWpsPinToString(pin)};
 }
 
 SupplicantStatus P2pIface::cancelWpsInternal(const std::string& group_ifname)
diff --git a/wpa_supplicant/hidl/sta_iface.cpp b/wpa_supplicant/hidl/sta_iface.cpp
index aee2ae9..d3a430f 100644
--- a/wpa_supplicant/hidl/sta_iface.cpp
+++ b/wpa_supplicant/hidl/sta_iface.cpp
@@ -10,6 +10,7 @@
 #include "hidl_manager.h"
 #include "hidl_return_util.h"
 #include "iface_config_utils.h"
+#include "misc_utils.h"
 #include "sta_iface.h"
 
 extern "C" {
@@ -873,10 +874,8 @@
 	if (pin < 0) {
 		return {{SupplicantStatusCode::FAILURE_UNKNOWN, ""}, ""};
 	}
-	std::string pin_str;
-	pin_str.reserve(9);
-	snprintf(&pin_str[0], pin_str.size(), "%08d", pin);
-	return {{SupplicantStatusCode::SUCCESS, ""}, pin_str};
+	return {{SupplicantStatusCode::SUCCESS, ""},
+		misc_utils::convertWpsPinToString(pin)};
 }
 
 SupplicantStatus StaIface::cancelWpsInternal()