* [PATCH 0/3] Add null text/alpha identifier and icon check handling
@ 2010-12-31 12:30 Jeevaka Badrappan
2010-12-31 12:30 ` [PATCH 1/3] stkutil: Allocate for empty string in text dataobj Jeevaka Badrappan
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Jeevaka Badrappan @ 2010-12-31 12:30 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 940 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 | 189 ++++++++++++++++++++++++++++++++++++++++++++++-----
unit/test-stkutil.c | 12 ++-
2 files changed, 180 insertions(+), 21 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 1/3] stkutil: Allocate for empty string in text dataobj 2010-12-31 12:30 [PATCH 0/3] Add null text/alpha identifier and icon check handling Jeevaka Badrappan @ 2010-12-31 12:30 ` Jeevaka Badrappan 2010-12-31 12:30 ` [PATCH 2/3] stkutil: add missing text and icon check Jeevaka Badrappan 2010-12-31 12:30 ` [PATCH 3/3] unit: add error status support for failure cases Jeevaka Badrappan 2 siblings, 0 replies; 6+ messages in thread From: Jeevaka Badrappan @ 2010-12-31 12:30 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] 6+ messages in thread
* [PATCH 2/3] stkutil: add missing text and icon check 2010-12-31 12:30 [PATCH 0/3] Add null text/alpha identifier and icon check handling Jeevaka Badrappan 2010-12-31 12:30 ` [PATCH 1/3] stkutil: Allocate for empty string in text dataobj Jeevaka Badrappan @ 2010-12-31 12:30 ` Jeevaka Badrappan 2011-01-04 16:43 ` Denis Kenzior 2010-12-31 12:30 ` [PATCH 3/3] unit: add error status support for failure cases Jeevaka Badrappan 2 siblings, 1 reply; 6+ messages in thread From: Jeevaka Badrappan @ 2010-12-31 12:30 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 18921 bytes --] As per the ETSI TS 102 223 section 6.5.4, If the terminalreceives 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 | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 171 insertions(+), 16 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 8aee8f7..28d0a86 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -74,6 +74,14 @@ struct gsm_sms_tpdu { unsigned char tpdu[184]; }; +static gboolean check_text_and_icon( const char *in, const unsigned char icon_id) +{ + if ((in == NULL || strlen(in) < 1) && icon_id != 0) + return FALSE; + + return TRUE; +} + static char *decode_text(unsigned char dcs, int len, const unsigned char *data) { char *utf8; @@ -2383,6 +2391,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -2392,7 +2401,7 @@ static enum stk_command_parse_result parse_display_text( command->destructor = destroy_display_text; - return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT, + result = 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 +2415,14 @@ static enum stk_command_parse_result parse_display_text( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->text, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_get_inkey(struct stk_command *command) @@ -2418,6 +2435,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -2427,7 +2445,7 @@ static enum stk_command_parse_result parse_get_inkey( command->destructor = destroy_get_inkey; - return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT, + result = 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 +2457,14 @@ static enum stk_command_parse_result parse_get_inkey( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->text, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_get_input(struct stk_command *command) @@ -2452,6 +2478,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -2461,7 +2488,7 @@ static enum stk_command_parse_result parse_get_input( command->destructor = destroy_get_input; - return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT, + result = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT, DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM, &obj->text, STK_DATA_OBJECT_TYPE_RESPONSE_LENGTH, @@ -2476,6 +2503,14 @@ static enum stk_command_parse_result parse_get_input( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->text, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static enum stk_command_parse_result parse_more_time( @@ -2501,6 +2536,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -2510,7 +2546,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, + result = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, 0, &obj->alpha_id, STK_DATA_OBJECT_TYPE_TONE, 0, &obj->tone, @@ -2523,6 +2559,14 @@ static enum stk_command_parse_result parse_play_tone( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static enum stk_command_parse_result parse_poll_interval( @@ -2556,6 +2600,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -2565,7 +2610,7 @@ static enum stk_command_parse_result parse_setup_menu( command->destructor = destroy_setup_menu; - return parse_dataobj(iter, + result = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_ALPHA_ID, DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM, &obj->alpha_id, @@ -2583,6 +2628,14 @@ 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); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_select_item(struct stk_command *command) @@ -2630,7 +2683,11 @@ static enum stk_command_parse_result parse_select_item( command->destructor = destroy_select_item; - if (status == STK_PARSE_RESULT_OK && obj->items == NULL) + if (status != STK_PARSE_RESULT_OK) + return status; + + if ((check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) || + obj->items == NULL) status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; return status; @@ -2679,6 +2736,11 @@ static enum stk_command_parse_result parse_send_sms( if (status != STK_PARSE_RESULT_OK) goto out; + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) { + status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + goto out; + } + if (gsm_tpdu.len == 0 && obj->cdma_sms.len == 0) { status = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; goto out; @@ -2814,6 +2876,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -2823,7 +2886,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, + result = 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 +2910,17 @@ static enum stk_command_parse_result parse_setup_call( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if ((check_text_and_icon(obj->alpha_id_usr_cfm, + obj->icon_id_usr_cfm.id) == FALSE) || + (check_text_and_icon(obj->alpha_id_call_setup, + obj->icon_id_call_setup.id) == FALSE)) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_refresh(struct stk_command *command) @@ -2861,6 +2935,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -2870,7 +2945,7 @@ static enum stk_command_parse_result parse_refresh( command->destructor = destroy_refresh; - return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_FILE_LIST, 0, + result = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_FILE_LIST, 0, &obj->file_list, STK_DATA_OBJECT_TYPE_AID, 0, &obj->aid, @@ -2883,6 +2958,14 @@ static enum stk_command_parse_result parse_refresh( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static enum stk_command_parse_result parse_polling_off( @@ -3036,6 +3119,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -3045,7 +3129,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, + result = 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 +3139,14 @@ 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); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->text, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_run_at_command(struct stk_command *command) @@ -3068,6 +3160,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -3077,7 +3170,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, + result = 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 +3182,14 @@ 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); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_send_dtmf(struct stk_command *command) @@ -3102,6 +3203,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -3111,7 +3213,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, + result = 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 +3225,14 @@ static enum stk_command_parse_result parse_send_dtmf( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static enum stk_command_parse_result parse_language_notification( @@ -3213,6 +3323,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -3222,7 +3333,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, + result = 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 +3342,14 @@ static enum stk_command_parse_result parse_close_channel( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_receive_data(struct stk_command *command) @@ -3243,6 +3362,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -3253,7 +3373,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, + result = 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 +3385,14 @@ static enum stk_command_parse_result parse_receive_data( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_send_data(struct stk_command *command) @@ -3278,6 +3406,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -3288,7 +3417,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, + result = 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 +3429,14 @@ static enum stk_command_parse_result parse_send_data( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static enum stk_command_parse_result parse_get_channel_status( @@ -3461,6 +3598,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -3470,7 +3608,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, + result = 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 +3628,14 @@ static enum stk_command_parse_result parse_retrieve_mms( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_submit_mms(struct stk_command *command) @@ -3505,6 +3651,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 result; if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; @@ -3514,7 +3661,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, + result = 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 +3675,14 @@ static enum stk_command_parse_result parse_submit_mms( STK_DATA_OBJECT_TYPE_FRAME_ID, 0, &obj->frame_id, STK_DATA_OBJECT_TYPE_INVALID); + + if (result != STK_PARSE_RESULT_OK) + return result; + + if (check_text_and_icon(obj->alpha_id, obj->icon_id.id) == FALSE) + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; + + return result; } static void destroy_display_mms(struct stk_command *command) -- 1.7.0.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] stkutil: add missing text and icon check 2010-12-31 12:30 ` [PATCH 2/3] stkutil: add missing text and icon check Jeevaka Badrappan @ 2011-01-04 16:43 ` Denis Kenzior 2011-01-04 22:11 ` Jeevaka Badrappan 0 siblings, 1 reply; 6+ messages in thread From: Denis Kenzior @ 2011-01-04 16:43 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2452 bytes --] Hi Jeevaka, On 12/31/2010 06:30 AM, Jeevaka Badrappan wrote: > As per the ETSI TS 102 223 section 6.5.4, > If the terminalreceives 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 | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- > 1 files changed, 171 insertions(+), 16 deletions(-) > > diff --git a/src/stkutil.c b/src/stkutil.c > index 8aee8f7..28d0a86 100644 > --- a/src/stkutil.c > +++ b/src/stkutil.c > @@ -74,6 +74,14 @@ struct gsm_sms_tpdu { > unsigned char tpdu[184]; > }; > > +static gboolean check_text_and_icon( const char *in, const unsigned char icon_id) Why is there a space before const char? > +{ > + if ((in == NULL || strlen(in) < 1) && icon_id != 0) Can in ever be null? And I'd also prefer not using strlen(in) but using in[0] == '\0'. > + return FALSE; > + > + return TRUE; > +} > + > static char *decode_text(unsigned char dcs, int len, const unsigned char *data) > { > char *utf8; > @@ -2383,6 +2391,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 result; > > if (command->src != STK_DEVICE_IDENTITY_TYPE_UICC) > return STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; > @@ -2392,7 +2401,7 @@ static enum stk_command_parse_result parse_display_text( > > command->destructor = destroy_display_text; > > - return parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT, > + result = 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 +2415,14 @@ static enum stk_command_parse_result parse_display_text( > STK_DATA_OBJECT_TYPE_FRAME_ID, 0, > &obj->frame_id, > STK_DATA_OBJECT_TYPE_INVALID); > + > + if (result != STK_PARSE_RESULT_OK) > + return result; > + > + if (check_text_and_icon(obj->text, obj->icon_id.id) == FALSE) > + result = STK_PARSE_RESULT_DATA_NOT_UNDERSTOOD; > + > + return result; > } > Since the following code is repeated ad-naseum, I'd like to see this as a macro. See e.g. CALLBACK_END macro in src/stkagent.c Regards, -Denis ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/3] stkutil: add missing text and icon check 2011-01-04 16:43 ` Denis Kenzior @ 2011-01-04 22:11 ` Jeevaka Badrappan 0 siblings, 0 replies; 6+ messages in thread From: Jeevaka Badrappan @ 2011-01-04 22:11 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] 6+ messages in thread
* [PATCH 3/3] unit: add error status support for failure cases 2010-12-31 12:30 [PATCH 0/3] Add null text/alpha identifier and icon check handling Jeevaka Badrappan 2010-12-31 12:30 ` [PATCH 1/3] stkutil: Allocate for empty string in text dataobj Jeevaka Badrappan 2010-12-31 12:30 ` [PATCH 2/3] stkutil: add missing text and icon check Jeevaka Badrappan @ 2010-12-31 12:30 ` Jeevaka Badrappan 2 siblings, 0 replies; 6+ messages in thread From: Jeevaka Badrappan @ 2010-12-31 12:30 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] 6+ messages in thread
end of thread, other threads:[~2011-01-04 22:11 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-12-31 12:30 [PATCH 0/3] Add null text/alpha identifier and icon check handling Jeevaka Badrappan 2010-12-31 12:30 ` [PATCH 1/3] stkutil: Allocate for empty string in text dataobj Jeevaka Badrappan 2010-12-31 12:30 ` [PATCH 2/3] stkutil: add missing text and icon check Jeevaka Badrappan 2011-01-04 16:43 ` Denis Kenzior 2011-01-04 22:11 ` Jeevaka Badrappan 2010-12-31 12:30 ` [PATCH 3/3] unit: add error status support for failure cases Jeevaka Badrappan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox