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

Reply via email to