diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 37531c6..1424065 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -1351,13 +1351,21 @@
 int lynq_sta_ssid_password_get(lynq_wifi_index_e idx, ap_info_s *ap, char *password) { // @todo
 
     FILE * fp;
-    int len, ret;
+    int len, ret, network_len;
     int count, index;
     char *split_lines[128] = {0};
     char *buff, *p;
 
+    network_len = 0;
+    p = NULL;
+
     CHECK_IDX(idx, CTRL_STA);
 
+    if (NULL == password) {
+        printf("bad param\n");
+        return -1;
+    }
+
     fp = fopen("/data/wifi/wg870/wpa_supplicant.conf", "rb");
     if (NULL == fp) {
         printf("open file fail\n");
@@ -1382,7 +1390,8 @@
                  buff[index] = '\0';
                  break;
              }
-             len = buff + index - p;
+             network_len = buff + index - p;
+             break;
         }
 
         if (strstr(p, ap->ap_ssid) != NULL) {
@@ -1390,11 +1399,11 @@
         }
     }
 
-    if (index >= len) {
+    if (index >= len || NULL == p || network_len <= 0) {
         return -1;
     }
 
-    count = lynq_split(p, len, '\n', split_lines);
+    count = lynq_split(p, network_len, '\n', split_lines);
 
     ret = -1;
     for(index=0; index < count; index++) {
@@ -1960,9 +1969,10 @@
 
 int lynq_get_sta_saved_ap(lynq_wifi_index_e idx, saved_ap_info_s ** list, int * len)
 {    
-    int count, index;
+    int count, index, ssid_len;
     int net_no_list[128];
     char freq[16];
+    char *ssid_ptr;
 
     if (list == NULL || len == NULL) {
         printf("bad param\n");
@@ -1977,16 +1987,25 @@
     printf("count is %d\n", count);
 
     *list = malloc(sizeof (saved_ap_info_s) * count);
+    memset(*list, 0, sizeof (saved_ap_info_s) * count);
     *len = count;
 
     for (index=0; index < count; index++) {
         printf("to get ssid %d\n", index);
         inner_get_param(CTRL_STA, net_no_list[index], "ssid", (*list)[index].base_info.ap_ssid);
-        printf("to get bssid\n");
+
+        ssid_ptr = (*list)[index].base_info.ap_ssid;
+        ssid_len = strlen(ssid_ptr);
+        if (ssid_ptr[0] == '\"') {
+            memmove(ssid_ptr, ssid_ptr + 1, ssid_len - 1);
+            ssid_len -= 1;
+        }
+        if (ssid_len > 0 && ssid_ptr[ssid_len - 1] == '\"') {
+            ssid_ptr[ssid_len - 1] = '\0';
+        }
+
         inner_get_param(CTRL_STA, net_no_list[index], "bssid", (*list)[index].base_info.ap_mac);
-        printf("to get inner_get_network_auth\n");
         inner_get_network_auth(CTRL_STA, net_no_list[index], &(*list)[index].base_info.auth);
-        printf("to get frequency\n");
         if (inner_get_param(CTRL_STA, net_no_list[index], "frequency", freq) == 0) {
             (*list)[index].base_info.band = convert_band_from_freq(atoi(freq));
         }
@@ -1994,6 +2013,7 @@
             (*list)[index].base_info.band = -1;
         }
 
+        lynq_sta_ssid_password_get(idx, & (*list)[index].base_info, (*list)[index].base_info.psw);
     }
 
     return 0;
