Hi Denis,
On 08/23/2012 12:55 AM, Denis Kenzior wrote:
Hi Philippe,
On 08/22/2012 11:18 AM, Philippe Nunes wrote:
The function 'valid_phone_number_format' does not comply with GCF test
cases
expectation. For STK, the character '+' should be considered as a
whole digit.
---
src/stkagent.c | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/src/stkagent.c b/src/stkagent.c
index 7c3f697..392a2b2 100644
--- a/src/stkagent.c
+++ b/src/stkagent.c
@@ -69,6 +69,27 @@ struct stk_agent {
#define TERMINATE_ERROR ERROR_PREFIX ".EndSession"
#define BUSY_ERROR ERROR_PREFIX ".Busy"
+static gboolean check_digit(const char *digit)
I really don't like the name...
+{
+ int len = strlen(digit);
+ int i;
+
+ if (!len)
+ return FALSE;
+
+ for (i = 0; i< len; i++) {
+ if (digit[i]>= '0'&& digit[i]<= '9')
+ continue;
+
+ if (digit[i] == '*' || digit[i] == '#' || digit[i] == '+')
+ continue;
+
+ return FALSE;
+ }
+
+ return TRUE;
And this function is entirely too long-winded for what it is doing.
Please refer to 'man strspn'. It might be easier to simply use strspn
below...
+}
+
static void stk_agent_send_noreply(struct stk_agent *agent, const char
*method)
{
DBusConnection *conn = ofono_dbus_get_connection();
@@ -541,7 +562,7 @@ static void get_digit_cb(DBusPendingCall *call,
void *data)
DBUS_TYPE_STRING,&digit,
DBUS_TYPE_INVALID) == FALSE ||
strlen(digit) != 1 ||
- !valid_phone_number_format(digit)) {
+ !check_digit(digit)) {
This is still wrong as it also needs to take care of the hidden_input
case where the '+' is not allowed.
Good point. But then, it requires to retrieve the command qualifier (or
at least the hidden_val property from the agent->msg).
I think this is more complicated to perform this checking here. It
should be more convenient to place this in the callback (here
'request_key_cb').
But we can think also to simply remove any checking. For GET_INPUT, we
are not checking the min/max length ;o)
Note that apparently, we missed to consider the hidden property in
'handle_command_get_inkey'. Therefore, we are not sending this
information to the STK agent. I'm willing to correct this.
Regards,
Philippe.
ofono_error("Can't parse the reply to GetDigit()");
remove_agent = TRUE;
goto error;
@@ -675,7 +696,8 @@ static void get_digits_cb(DBusPendingCall *call,
void *data)
if (dbus_message_get_args(reply, NULL,
DBUS_TYPE_STRING,&string,
- DBUS_TYPE_INVALID) == FALSE) {
+ DBUS_TYPE_INVALID) == FALSE ||
+ !check_digit(string)) {
As above
ofono_error("Can't parse the reply to GetDigits()");
remove_agent = TRUE;
goto error;
Regards,
-Denis
_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono