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()