From cbf0a3aa21a31f7ea24ff1fb391f50670ab6ae51 Mon Sep 17 00:00:00 2001
From: Aleksander Morgado <aleksander@aleksander.es>
Date: Fri, 4 Sep 2020 10:44:56 +0200
Subject: [PATCH] libqmi-glib,utils: allow TAB characters as printable in
 strings
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

So that instead of this:
  TLV:
    type       = "Model" (0x01)
    length     = 8
    value      = 45:4D:31:32:2D:41:57:09
    translated = EΞE_S%P+Ç

We get this:
  TLV:
    type       = "Model" (0x01)
    length     = 8
    value      = 45:4D:31:32:2D:41:57:09
    translated = EM12-AW
---
 src/libqmi-glib/qmi-utils.c         |  6 ++++--
 src/libqmi-glib/test/test-message.c | 20 ++++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/libqmi-glib/qmi-utils.c b/src/libqmi-glib/qmi-utils.c
index 7fa4832c..f7d186c8 100644
--- a/src/libqmi-glib/qmi-utils.c
+++ b/src/libqmi-glib/qmi-utils.c
@@ -151,8 +151,10 @@ __qmi_string_utf8_validate_printable (const guint8 *utf8,
 
         /* Explicitly allow CR and LF even if they're control characters, given
          * that NMEA traces reported via QMI LOC indications seem to have these
-         * suffixed. */
-        if (*p == '\r' || *p == '\n')
+         * suffixed.
+         * Also, explicitly allow TAB as some manufacturers seem to include it
+         * e.g. in model info strings. */
+        if (*p == '\r' || *p == '\n' || *p == '\t')
             continue;
 
         unichar = g_utf8_get_char (p);
diff --git a/src/libqmi-glib/test/test-message.c b/src/libqmi-glib/test/test-message.c
index 7fbfbecb..885be340 100644
--- a/src/libqmi-glib/test/test-message.c
+++ b/src/libqmi-glib/test/test-message.c
@@ -279,6 +279,23 @@ test_message_parse_string_with_trailing_nul (void)
 
 #endif
 
+#if defined HAVE_QMI_MESSAGE_DMS_GET_MODEL
+
+static void
+test_message_parse_string_with_trailing_tab (void)
+{
+    /* Quectel EM12-AW model strint has a trailing TAB character (ASCII 0x09) */
+    const guint8 buffer[] = {
+        0x01, 0x1E, 0x00, 0x80, 0x02, 0x05, 0x02, 0x01, 0x00, 0x22, 0x00, 0x12,
+        0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x45,
+        0x4D, 0x31, 0x32, 0x2D, 0x41, 0x57, 0x09
+    };
+
+    test_message_printable_common (buffer, sizeof (buffer), QMI_MESSAGE_VENDOR_GENERIC, "EM12-AW");
+}
+
+#endif
+
 /*****************************************************************************/
 
 static void
@@ -1580,6 +1597,9 @@ int main (int argc, char **argv)
 #if defined HAVE_QMI_MESSAGE_DMS_SWI_GET_CURRENT_FIRMWARE
     g_test_add_func ("/libqmi-glib/message/parse/string-with-trailing-nul", test_message_parse_string_with_trailing_nul);
 #endif
+#if defined HAVE_QMI_MESSAGE_DMS_GET_MODEL
+    g_test_add_func ("/libqmi-glib/message/parse/string-with-trailing-tab", test_message_parse_string_with_trailing_tab);
+#endif
 
     g_test_add_func ("/libqmi-glib/message/new/request",           test_message_new_request);
     g_test_add_func ("/libqmi-glib/message/new/request-from-data", test_message_new_request_from_data);
-- 
GitLab