All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Add null text/alpha identifier and icon check handling
@ 2011-01-04 22:42 Jeevaka Badrappan
  2011-01-04 22:42 ` [PATCH 1/3] stkutil: Allocate for empty string in text dataobj Jeevaka Badrappan
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Jeevaka Badrappan @ 2011-01-04 22:42 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 941 bytes --]

Hi,

Following patch adds the missing "text/alpha identifier and icon"
check handling.

As per the ETSI 102 223 section 6.8, Text string is only required in
response to a GetInkey or GetInput proactive command. So, there is no
need to add any specific handling for null or empty strings cases.

As per the ETSI TS 102 223 section 6.5.4, "If the terminal receives an
icon, and either an empty or no alpha identifier/text string is given
by the UICC, than the terminal shall reject the command with general"
result "Command data not understood by terminal"."

Regards,
Jeevaka

Jeevaka Badrappan (3):
  stkutil: Allocate for empty string in text dataobj
  stkutil: add missing text and icon check
  unit: add error status support for failure cases

 src/stkutil.c       |  122 ++++++++++++++++++++++++++++++++++++++++++++-------
 unit/test-stkutil.c |   12 +++--
 2 files changed, 114 insertions(+), 20 deletions(-)


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] stkutil: Allocate for empty string in text dataobj
  2011-01-04 22:42 [PATCH 0/3] Add null text/alpha identifier and icon check handling Jeevaka Badrappan
@ 2011-01-04 22:42 ` Jeevaka Badrappan
  2011-01-04 22:42 ` [PATCHv2 2/3] stkutil: add missing text and icon check Jeevaka Badrappan
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Jeevaka Badrappan @ 2011-01-04 22:42 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 448 bytes --]

---
 src/stkutil.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index ab33c7d..8aee8f7 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -565,7 +565,7 @@ static gboolean parse_dataobj_text(struct comprehension_tlv_iter *iter,
 	const unsigned char *data;
 	char *utf8;
 
-	if (len == 0) {
+	if (len <= 1) {
 		*text = g_try_malloc0(1);
 		return TRUE;
 	}
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCHv2 2/3] stkutil: add missing text and icon check
  2011-01-04 22:42 [PATCH 0/3] Add null text/alpha identifier and icon check handling Jeevaka Badrappan
  2011-01-04 22:42 ` [PATCH 1/3] stkutil: Allocate for empty string in text dataobj Jeevaka Badrappan
@ 2011-01-04 22:42 ` Jeevaka Badrappan
  2011-01-04 22:42 ` [PATCH 3/3] unit: add error status support for failure cases Jeevaka Badrappan
  2011-01-05 16:07 ` [PATCH 0/3] Add null text/alpha identifier and icon check handling Denis Kenzior
  3 siblings, 0 replies; 5+ messages in thread
From: Jeevaka Badrappan @ 2011-01-04 22:42 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 16911 bytes --]

As per the ETSI TS 102 223 section 6.5.4, If the terminal
receives an icon, and either an empty or no alpha identifier/text string
is given by the UICC, than the terminal shall reject the command
with general result "Command data not understood by terminal".
---
 src/stkutil.c |  120 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 105 insertions(+), 15 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 8aee8f7..f7ea193 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -74,6 +74,13 @@ struct gsm_sms_tpdu {
 	unsigned char tpdu[184];
 };
 
+#define CHECK_TEXT_AND_ICON(text, icon_id)			\
+	if (status != STK_PARSE_RESULT_OK)			\
+		return status;					\
+								\
+	if ((text == NULL || text[0] == '\0') && icon_id != 0)	\
+		status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;	\
+
 static char *decode_text(unsigned char dcs, int len, const unsigned char *data)
 {
 	char *utf8;
@@ -2383,6 +2390,7 @@ static enum stk_command_parse_result parse_display_text(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_display_text *obj = &command->display_text;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -2392,7 +2400,7 @@ static enum stk_command_parse_result parse_display_text(
 
 	command->destructor = destroy_display_text;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
 				DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
 				&obj->text,
 				STK_DATA_OBJECT_TYPE_ICON_ID, 0,
@@ -2406,6 +2414,10 @@ static enum stk_command_parse_result parse_display_text(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->text, obj->icon_id.id);
+
+	return status;
 }
 
 static void destroy_get_inkey(struct stk_command *command)
@@ -2418,6 +2430,7 @@ static enum stk_command_parse_result parse_get_inkey(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_get_inkey *obj = &command->get_inkey;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -2427,7 +2440,7 @@ static enum stk_command_parse_result parse_get_inkey(
 
 	command->destructor = destroy_get_inkey;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
 				DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
 				&obj->text,
 				STK_DATA_OBJECT_TYPE_ICON_ID, 0,
@@ -2439,6 +2452,10 @@ static enum stk_command_parse_result parse_get_inkey(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->text, obj->icon_id.id);
+
+	return status;
 }
 
 static void destroy_get_input(struct stk_command *command)
@@ -2452,6 +2469,7 @@ static enum stk_command_parse_result parse_get_input(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_get_input *obj = &command->get_input;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -2461,7 +2479,7 @@ static enum stk_command_parse_result parse_get_input(
 
 	command->destructor = destroy_get_input;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
 				DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
 				&obj->text,
 				STK_DATA_OBJECT_TYPE_RESPONSE_LENGTH,
@@ -2476,6 +2494,10 @@ static enum stk_command_parse_result parse_get_input(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->text, obj->icon_id.id);
+
+	return status;
 }
 
 static enum stk_command_parse_result parse_more_time(
@@ -2501,6 +2523,7 @@ static enum stk_command_parse_result parse_play_tone(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_play_tone *obj = &command->play_tone;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -2510,7 +2533,7 @@ static enum stk_command_parse_result parse_play_tone(
 
 	command->destructor = destroy_play_tone;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
 				&obj->alpha_id,
 				STK_DATA_OBJECT_TYPE_TONE, 0,
 				&obj->tone,
@@ -2523,6 +2546,10 @@ static enum stk_command_parse_result parse_play_tone(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static enum stk_command_parse_result parse_poll_interval(
@@ -2556,6 +2583,7 @@ static enum stk_command_parse_result parse_setup_menu(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_setup_menu *obj = &command->setup_menu;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -2565,7 +2593,7 @@ static enum stk_command_parse_result parse_setup_menu(
 
 	command->destructor = destroy_setup_menu;
 
-	return parse_dataobj(iter,
+	status = parse_dataobj(iter,
 			STK_DATA_OBJECT_TYPE_ALPHA_ID,
 			DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
 			&obj->alpha_id,
@@ -2583,6 +2611,10 @@ static enum stk_command_parse_result parse_setup_menu(
 			STK_DATA_OBJECT_TYPE_ITEM_TEXT_ATTRIBUTE_LIST, 0,
 			&obj->item_text_attr_list,
 			STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static void destroy_select_item(struct stk_command *command)
@@ -2633,6 +2665,8 @@ static enum stk_command_parse_result parse_select_item(
 	if (status == STK_PARSE_RESULT_OK && obj->items == NULL)
 		status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
 
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
 	return status;
 }
 
@@ -2679,6 +2713,11 @@ static enum stk_command_parse_result parse_send_sms(
 	if (status != STK_PARSE_RESULT_OK)
 		goto out;
 
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	if (status != STK_PARSE_RESULT_OK)
+		goto out;
+
 	if (gsm_tpdu.len == 0 && obj->cdma_sms.len == 0) {
 		status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
 		goto out;
@@ -2814,6 +2853,7 @@ static enum stk_command_parse_result parse_setup_call(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_setup_call *obj = &command->setup_call;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -2823,7 +2863,7 @@ static enum stk_command_parse_result parse_setup_call(
 
 	command->destructor = destroy_setup_call;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
 				&obj->alpha_id_usr_cfm,
 				STK_DATA_OBJECT_TYPE_ADDRESS,
 				DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
@@ -2847,6 +2887,11 @@ static enum stk_command_parse_result parse_setup_call(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id_usr_cfm, obj->icon_id_usr_cfm.id);
+	CHECK_TEXT_AND_ICON(obj->alpha_id_call_setup, obj->icon_id_call_setup.id);
+
+	return status;
 }
 
 static void destroy_refresh(struct stk_command *command)
@@ -2861,6 +2906,7 @@ static enum stk_command_parse_result parse_refresh(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_refresh *obj = &command->refresh;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -2870,7 +2916,7 @@ static enum stk_command_parse_result parse_refresh(
 
 	command->destructor = destroy_refresh;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_FILE_LIST, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_FILE_LIST, 0,
 				&obj->file_list,
 				STK_DATA_OBJECT_TYPE_AID, 0,
 				&obj->aid,
@@ -2883,6 +2929,10 @@ static enum stk_command_parse_result parse_refresh(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static enum stk_command_parse_result parse_polling_off(
@@ -3036,6 +3086,7 @@ static enum stk_command_parse_result parse_setup_idle_mode_text(
 {
 	struct stk_command_setup_idle_mode_text *obj =
 					&command->setup_idle_mode_text;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -3045,7 +3096,7 @@ static enum stk_command_parse_result parse_setup_idle_mode_text(
 
 	command->destructor = destroy_setup_idle_mode_text;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
 				DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
 				&obj->text,
 				STK_DATA_OBJECT_TYPE_ICON_ID, 0,
@@ -3055,6 +3106,10 @@ static enum stk_command_parse_result parse_setup_idle_mode_text(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->text, obj->icon_id.id);
+
+	return status;
 }
 
 static void destroy_run_at_command(struct stk_command *command)
@@ -3068,6 +3123,7 @@ static enum stk_command_parse_result parse_run_at_command(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_run_at_command *obj = &command->run_at_command;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -3077,7 +3133,7 @@ static enum stk_command_parse_result parse_run_at_command(
 
 	command->destructor = destroy_run_at_command;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
 				&obj->alpha_id,
 				STK_DATA_OBJECT_TYPE_AT_COMMAND,
 				DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
@@ -3089,6 +3145,10 @@ static enum stk_command_parse_result parse_run_at_command(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static void destroy_send_dtmf(struct stk_command *command)
@@ -3102,6 +3162,7 @@ static enum stk_command_parse_result parse_send_dtmf(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_send_dtmf *obj = &command->send_dtmf;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -3111,7 +3172,7 @@ static enum stk_command_parse_result parse_send_dtmf(
 
 	command->destructor = destroy_send_dtmf;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
 				&obj->alpha_id,
 				STK_DATA_OBJECT_TYPE_DTMF_STRING,
 				DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
@@ -3123,6 +3184,10 @@ static enum stk_command_parse_result parse_send_dtmf(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static enum stk_command_parse_result parse_language_notification(
@@ -3213,6 +3278,7 @@ static enum stk_command_parse_result parse_close_channel(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_close_channel *obj = &command->close_channel;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -3222,7 +3288,7 @@ static enum stk_command_parse_result parse_close_channel(
 
 	command->destructor = destroy_close_channel;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
 				&obj->alpha_id,
 				STK_DATA_OBJECT_TYPE_ICON_ID, 0,
 				&obj->icon_id,
@@ -3231,6 +3297,10 @@ static enum stk_command_parse_result parse_close_channel(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static void destroy_receive_data(struct stk_command *command)
@@ -3243,6 +3313,7 @@ static enum stk_command_parse_result parse_receive_data(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_receive_data *obj = &command->receive_data;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -3253,7 +3324,7 @@ static enum stk_command_parse_result parse_receive_data(
 
 	command->destructor = destroy_receive_data;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
 				&obj->alpha_id,
 				STK_DATA_OBJECT_TYPE_ICON_ID, 0,
 				&obj->icon_id,
@@ -3265,6 +3336,10 @@ static enum stk_command_parse_result parse_receive_data(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static void destroy_send_data(struct stk_command *command)
@@ -3278,6 +3353,7 @@ static enum stk_command_parse_result parse_send_data(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_send_data *obj = &command->send_data;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -3288,7 +3364,7 @@ static enum stk_command_parse_result parse_send_data(
 
 	command->destructor = destroy_send_data;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
 				&obj->alpha_id,
 				STK_DATA_OBJECT_TYPE_ICON_ID, 0,
 				&obj->icon_id,
@@ -3300,6 +3376,10 @@ static enum stk_command_parse_result parse_send_data(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static enum stk_command_parse_result parse_get_channel_status(
@@ -3461,6 +3541,7 @@ static enum stk_command_parse_result parse_retrieve_mms(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_retrieve_mms *obj = &command->retrieve_mms;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -3470,7 +3551,7 @@ static enum stk_command_parse_result parse_retrieve_mms(
 
 	command->destructor = destroy_retrieve_mms;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
 				&obj->alpha_id,
 				STK_DATA_OBJECT_TYPE_ICON_ID, 0,
 				&obj->icon_id,
@@ -3490,6 +3571,10 @@ static enum stk_command_parse_result parse_retrieve_mms(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static void destroy_submit_mms(struct stk_command *command)
@@ -3505,6 +3590,7 @@ static enum stk_command_parse_result parse_submit_mms(
 					struct comprehension_tlv_iter *iter)
 {
 	struct stk_command_submit_mms *obj = &command->submit_mms;
+	enum stk_command_parse_result status;
 
 	if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC)
 		return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD;
@@ -3514,7 +3600,7 @@ static enum stk_command_parse_result parse_submit_mms(
 
 	command->destructor = destroy_submit_mms;
 
-	return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
+	status = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0,
 				&obj->alpha_id,
 				STK_DATA_OBJECT_TYPE_ICON_ID, 0,
 				&obj->icon_id,
@@ -3528,6 +3614,10 @@ static enum stk_command_parse_result parse_submit_mms(
 				STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
 				&obj->frame_id,
 				STK_DATA_OBJECT_TYPE_INVALID);
+
+	CHECK_TEXT_AND_ICON(obj->alpha_id, obj->icon_id.id);
+
+	return status;
 }
 
 static void destroy_display_mms(struct stk_command *command)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] unit: add error status support for failure cases
  2011-01-04 22:42 [PATCH 0/3] Add null text/alpha identifier and icon check handling Jeevaka Badrappan
  2011-01-04 22:42 ` [PATCH 1/3] stkutil: Allocate for empty string in text dataobj Jeevaka Badrappan
  2011-01-04 22:42 ` [PATCHv2 2/3] stkutil: add missing text and icon check Jeevaka Badrappan
@ 2011-01-04 22:42 ` Jeevaka Badrappan
  2011-01-05 16:07 ` [PATCH 0/3] Add null text/alpha identifier and icon check handling Denis Kenzior
  3 siblings, 0 replies; 5+ messages in thread
From: Jeevaka Badrappan @ 2011-01-04 22:42 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2215 bytes --]

---
 unit/test-stkutil.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 185dfdd..f1cad78 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -13999,6 +13999,7 @@ struct setup_idle_mode_text_test {
 	struct stk_text_attribute text_attr;
 	struct stk_frame_id frame_id;
 	char *html;
+	enum stk_command_parse_result status;
 };
 
 static unsigned char setup_idle_mode_text_111[] = { 0xD0, 0x1A, 0x81, 0x03,
@@ -14415,7 +14416,8 @@ static struct setup_idle_mode_text_test setup_idle_mode_text_data_241 = {
 	.icon_id = {
 		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
 		.id = 0x01
-	}
+	},
+	.status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD
 };
 
 static struct setup_idle_mode_text_test setup_idle_mode_text_data_311 = {
@@ -14742,7 +14744,7 @@ static void test_setup_idle_mode_text(gconstpointer data)
 	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);
 
 	g_assert(command);
-	g_assert(command->status == STK_PARSE_RESULT_OK);
+	g_assert(command->status == test->status);
 
 	g_assert(command->number == 1);
 	g_assert(command->type == STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT);
@@ -14772,6 +14774,7 @@ struct run_at_command_test {
 	struct stk_icon_id icon_id;
 	struct stk_text_attribute text_attr;
 	struct stk_frame_id frame_id;
+	enum stk_command_parse_result status;
 };
 
 static unsigned char run_at_command_111[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
@@ -15193,7 +15196,8 @@ static struct run_at_command_test run_at_command_data_251 = {
 	.icon_id = {
 		.qualifier = STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY,
 		.id = 0x01
-	}
+	},
+	.status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD
 };
 
 static struct run_at_command_test run_at_command_data_311 = {
@@ -15500,7 +15504,7 @@ static void test_run_at_command(gconstpointer data)
 	command = stk_command_new_from_pdu(test->pdu, test->pdu_len);
 
 	g_assert(command);
-	g_assert(command->status == STK_PARSE_RESULT_OK);
+	g_assert(command->status == test->status);
 
 	g_assert(command->number == 1);
 	g_assert(command->type == STK_COMMAND_TYPE_RUN_AT_COMMAND);
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] Add null text/alpha identifier and icon check handling
  2011-01-04 22:42 [PATCH 0/3] Add null text/alpha identifier and icon check handling Jeevaka Badrappan
                   ` (2 preceding siblings ...)
  2011-01-04 22:42 ` [PATCH 3/3] unit: add error status support for failure cases Jeevaka Badrappan
@ 2011-01-05 16:07 ` Denis Kenzior
  3 siblings, 0 replies; 5+ messages in thread
From: Denis Kenzior @ 2011-01-05 16:07 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 752 bytes --]

Hi Jeevaka,

On 01/04/2011 04:42 PM, Jeevaka Badrappan wrote:
> Hi,
> 
> Following patch adds the missing "text/alpha identifier and icon"
> check handling.
> 
> As per the ETSI 102 223 section 6.8, Text string is only required in
> response to a GetInkey or GetInput proactive command. So, there is no
> need to add any specific handling for null or empty strings cases.
> 
> As per the ETSI TS 102 223 section 6.5.4, "If the terminal receives an
> icon, and either an empty or no alpha identifier/text string is given
> by the UICC, than the terminal shall reject the command with general"
> result "Command data not understood by terminal"."
> 
> Regards,
> Jeevaka
> 

All three have been applied, thanks.

Regards,
-Denis

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-01-05 16:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-04 22:42 [PATCH 0/3] Add null text/alpha identifier and icon check handling Jeevaka Badrappan
2011-01-04 22:42 ` [PATCH 1/3] stkutil: Allocate for empty string in text dataobj Jeevaka Badrappan
2011-01-04 22:42 ` [PATCHv2 2/3] stkutil: add missing text and icon check Jeevaka Badrappan
2011-01-04 22:42 ` [PATCH 3/3] unit: add error status support for failure cases Jeevaka Badrappan
2011-01-05 16:07 ` [PATCH 0/3] Add null text/alpha identifier and icon check handling Denis Kenzior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.