éå»ïŒ2016幎ïŒãç§ãã¡ã¯ISP RASã®ååã«ã¡ãªãã§åä»ããããå ¬éäŒè°ã«åºåžããŸãã V.P. Ivannikovã¯ãTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«å€ãã®æ³šæãæãããŠããããšã«æ°ä»ããŸããã
â ãããªãªã³ã¯
Tizenã¯ãIntelãSamsungãªã©ã®äŒæ¥ã«ãã£ãŠéçºããã³ç®¡çãããŠãããªãŒãã³ãœãŒã¹ã®Linuxã«ãŒãã«ãšã³ãžã³ã§ãã
ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãããµããŒãããPVS-Studioéçã¢ãã©ã€ã¶ãŒãšéçåæææ³å šäœã®æ®åã«ããããããžã§ã¯ãã®ä¿¡é Œæ§ãé«ããŠããŸãã ãã®ç®çã®ããã«ããªãŒãã³ãããžã§ã¯ãã®åæã«é¢ããèšäºãäœæããéçåæã®ããŒã«ãæ®åãããŸãã ã³ã³ãã¹ããéå¬ããŸã ã ç¹å®ã®æ¡ä»¶ãªã©ã«å¿ããŠç¡æã®ã©ã€ã»ã³ã¹ãæäŸããŸãã ç¹ã«ãç§ãã¡ã¯ããã€ãã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§åå¥ã®äœæ¥ãè¡ãããããã«é¢ä¿ãã人ã ã«ç¡æã®ã©ã€ã»ã³ã¹ãšãµããŒããæäŸããŠããŸãã
2016幎ã®äŒè°ã«åå ããåã¯ãTizenãååšããããšä»¥å€ã¯äœãç¥ããŸããã§ããã ãããããã®åŸããã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã䜿çšããŠããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®éçºè ã®éã§éçåæææ³ãæ®åãããããšãã§ãããšèããŸããã åæã«ãããã¯PVS-Studioã¢ãã©ã€ã¶ãŒã®æ©èœãããäžåºŠå®èšŒããè¯ãæ¹æ³ã§ãã
ãã®çµæãäžé£ã®èšäºãTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ç»å ŽããŸãããããã®ãã¡ã®èšäºã Tizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã®27,000ãšã©ãŒ ããæãèå³æ·±ããã®ã§ãã ãã®ä»ã®èšäºïŒ
- Tizenã³ãŒãã®äŸã䜿çšããŠããã€ã¯ãæé©åã«ã€ããŠè©±ããŸããã ã
- TizenïŒCïŒã³ã³ããŒãã³ãã¯é«å質ã§ããããšãå€æããŸãã ã
- TizenïŒèŠçŽãã ã
- EFLã³ã¢ã©ã€ãã©ãªã®äŸã䜿çšããPVS-Studioã¢ãã©ã€ã¶ãŒã®ç¹æ§ã誀æ€ç¥ã®10ã15ïŒ ã
èšäºã¯ãã¢ãã©ã€ã¶ãŒãTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã³ãŒãã®å質ãå€§å¹ ã«æ¹åã§ããããšã瀺ããŠããŸãã
è¡ããããã¹ãŠã®äœæ¥ã®è«çççµè«ã¯ãäŒè°ã§ã®ç§ãã¡ã®å ±åãããããŸããã
ããããèªè ã¯æ£ããå°ããããšãã§ããŸãããªãPVS-Studioã¢ãã©ã€ã¶ãŒã¯Tizenã³ãŒããæ¹åã§ãããšæããŸããïŒ
ç§ã説æãããšã©ãŒïŒãŸãã¯ãããã®ã»ãšãã©ïŒã¯éçºè ã«ãã£ãŠä¿®æ£ããããšããäºå®ã«åºã¥ããŠæèŠãè¿°ã¹ãŠããŸãã ããŸããŸãªãããžã§ã¯ãã§ä»¥åã«çºèŠããããšã©ãŒãã©ã³ãã ã«ããã¯ã¢ãããããããã«äœãèµ·ãã£ãã®ãã調ã¹ãŸããã æ ¹æ ããªãããã«ãããã«ã€ããŠããã«è©³ãã説æããŸãã
æåã®ãã°ä¿®æ£
ããã§ã27,000件ã®ãšã©ãŒã«é¢ããèšäºã§ãorg.tizen.w-home-0.1.0ãããžã§ã¯ãã®ãšã©ãŒãå«ã次ã®ãã©ã°ã¡ã³ããæžããŸããã
static void __page_focus_changed_cb(void *data) { int i = 0; int *focus_unit = (int *)data; if (focus_unit == NULL || focus_unit < 0) { // <= _E("focus page is wrong"); return ; } .... }
<operatorã䜿çšããŠãã€ã³ã¿ãŒã0ãšæ¯èŒããããšã¯æå³ããããŸããã PVS-Studioã®èŠåã®ãããã§ãšã©ãŒãèŠã€ãããŸããïŒV503ããã¯ç¡æå³ãªæ¯èŒã§ãïŒãã€ã³ã¿ãŒ<0ãapps_view_circle_indicator.c 193
ãã®ãããã³ãŒãã¯å€æŽãããŠãããæ°ããããŒãžã§ã³ã§ã¯æ¬¡ã®ããã«ãªããŸãã
if (focus_unit == NULL || (*focus_unit) < 0) {
ãã®ããããã®èšäºã§ã¯ããã€ã³ã¿ãŒãéåç §ããã®ãå¿ããããšãæšæž¬ããŸããã
ä¿®æ£ããã2çªç®ã®ãã°
ãããžã§ã¯ãcapi-media-codec-0.5.3ã
void extract_input_aacdec_m4a_test( App * app, unsigned char **data, int *size, bool * have_frame) { .... unsigned char buffer[100000]; .... DONE: *data = buffer; *have_frame = TRUE; if (read_size >= offset) *size = offset; else *size = read_size; }
以äžã§ã¯ããšã©ãŒã®æ¬è³ªãåæããŸããããšã©ãŒã®èª¬æã¯åã®èšäºã§èŠã€ããããšãã§ããããã§ãã PVS-Studioã®èŠåã®ãããã§ãšã©ãŒãèŠã€ãããŸãããV507ããŒã«ã«é åããããã¡ããžã®ãã€ã³ã¿ã¯ããã®é åã®ç¯å²å€ã«ä¿åãããŠããŸãã ãã®ãããªãã€ã³ã¿ãŒã¯ç¡å¹ã«ãªããŸãã media_codec_test.c 793
ãããžã§ã¯ãã®æ°ããããŒãžã§ã³ã§ã¯ã extract_input_aacdec_m4a_testé¢æ°ã¯åçŽã«æ¶ããŸããã ãããã£ãŠãéæ¥çã«ã§ã¯ãããŸããããã®ãšã©ãŒã¯ä¿®æ£ããããšèšããŸãã ããããããã®ãã¹ãå šäœãåé·ãŸãã¯äžæ£ç¢ºã ã£ãã®ã§ãããã
ä¿®æ£ããã3çªç®ã®ãã°
Bluetooth-frwk-0.2.157ãããžã§ã¯ãã
typedef int gint; typedef gint gboolean; #define BT_REQUEST_ID_RANGE_MAX 245 static gboolean req_id_used[BT_REQUEST_ID_RANGE_MAX]; void _bt_init_request_id(void) { assigned_id = 0; memset(req_id_used, 0x00, BT_REQUEST_ID_RANGE_MAX); }
PVS-StudioèŠåïŒV512ãmemsetãé¢æ°ãåŒã³åºããšããããã¡ãŒãreq_id_usedãã®ã¢ã³ããŒãããŒãçºçããŸãã bt-service-util.c 38
ãã®ãšã©ãŒã¯ããããã¡ãµã€ãºãå®æ°ã§èšå®ãããªããªã£ãããã sizeofæŒç®åã䜿çšããŠèšç®ããããããä¿®æ£ãããŸããã
memset(req_id_used, 0x00, sizeof(req_id_used));
ãã®èšäºã§èª¬æãããã®ãã2çªç®ã®ä¿®æ£ãªãã·ã§ã³ãéžæããŸããã
ä¿®æ£ããã4çªç®ã®ãã°
ãããžã§ã¯ãorg.tizen.screen-reader-0.0.8ã
static void _on_atspi_event_cb(const AtspiEvent * event) { .... char buf[256] = "\0"; .... snprintf(buf, sizeof(buf), "%s, %s, ", name, _("IDS_BR_BODY_IMAGE_T_TTS")); .... snprintf(buf + strlen(buf), sizeof(buf), "%s, ", _("IDS_ACCS_BODY_SELECTED_TTS")); .... }
PVS-StudioèŠåïŒV512ãsnprintfãé¢æ°ãåŒã³åºããšããããã¡ãŒãbuf + strlenïŒbufïŒãããªãŒããŒãããŒããŸãã app_tracker.c 450
ä¿®æ£ãããããŒãžã§ã³ã¯ãèšäºã§ç§ãææ¡ããããªã¢ã³ãã«å¯Ÿå¿ããŠããŸãã
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s, ", _("IDS_ACCS_BODY_SELECTED_TTS"));
ä¿®æ£ããã5çªç®ã®ãã°
ãããžã§ã¯ãcapi-network-http-0.0.23ã
int _read_request_body(http_transaction_h http_transaction, char **body) { .... *body = realloc(*body, new_len + 1); .... memcpy(*body + curr_len, ptr, body_size); body[new_len] = '\0'; // <= curr_len = new_len; .... }
PVS-StudioèŠåïŒV527 '\ 0'å€ã 'char'ã¿ã€ããã€ã³ã¿ãŒã«å²ãåœãŠãããŠããã®ã¯å¥åŠã§ãã ããããæå³ïŒ* body [new_len] = '\ 0'ã http_request.c 370
ç¹°ãè¿ããŸãããã³ãŒãã¯ç§ãæšå¥šãããšããã«ä¿®æ£ãããŠããŸãã
(*body)[new_len] = '\0';
6çªç®ã®ãã°ä¿®æ£
ãããžã§ã¯ãorg.tizen.w-wifi-1.0.229ã
static void SHA1Final(unsigned char digest[20], SHA1_CTX* context) { u32 i; unsigned char finalcount[8]; .... memset(context->count, 0, 8); memset(finalcount, 0, 8); }
PVS-StudioèŠåïŒV597ã³ã³ãã€ã©ãŒã¯ããfinalcountããããã¡ãŒã®ãã©ãã·ã¥ã«äœ¿çšããããmemsetãé¢æ°åŒã³åºããåé€ã§ããŸããã ãã©ã€ããŒãããŒã¿ãæ¶å»ããã«ã¯ãmemset_sïŒïŒé¢æ°ã䜿çšããå¿ èŠããããŸãã wifi_generate_pin.c 185
ããã§ã¯ã finalcountãããã¡å ã®ããŒã¿ã誀ã£ãŠäžæžããããŸã ã ãããããããã¯äžæžããããŸãããã³ã³ãã€ã©ã¯ã memseté¢æ°åŒã³åºããåé€ããæš©å©ãæã£ãŠããŸãã å®éãããã¯æããã«memseté¢æ°åŒã³åºããåé€ããŠfinalcountãæ¶å»ãããããæ¬åœã®ééãã§ã¯ãããŸããã§ããã ãã®ãããã¡ã«ã¯éèŠãªãã®ãå«ãŸããŠããªãããããã®ãããã¡ããªã»ããããå¿ èŠã¯ãªããšæããŸãã
ããã§ããã³ãŒãã¯ä¿®æ£ãããŸãããã€ãŸããèè ã¯èšäºã®æ å ±ãèããŠããŸããã
7çªç®ã®ãã°ä¿®æ£
ãããžã§ã¯ãorg.tizen.setting-1.0.1ã
static void __draw_remove_list(SettingRingtoneData *ad) { char *full_path = NULL; .... full_path = (char *)alloca(PATH_MAX); // <= .... if (!select_all_item) { SETTING_TRACE_ERROR("select_all_item is NULL"); free(full_path); // <= return; } .... }
PVS-StudioèŠåïŒV611ã¡ã¢ãªã¯ãallocaãæ©èœã䜿çšããŠå²ãåœãŠãããŸãããããfreeãæ©èœã䜿çšããŠè§£æŸãããŸããã ãfull_pathãå€æ°ã®èåŸã«ããæäœããžãã¯ã調ã¹ãããšãæ€èšããŠãã ããã setting-ringtone-remove.c 88
__draw_remove_listé¢æ°ã¯å¥ã®setting-ringtone-remove.cãã¡ã€ã«ã«ç§»åãããã®ã³ãŒãã¯ä¿®æ£ãããŸããã freeïŒfull_pathïŒé¢æ°ã®åŒã³åºãã¯åé€ãããŸãããããã¯åã«å¿ èŠã§ã¯ãªããæ害ã§ããããããã§ãã
èå³æ·±ãããšã§ã¯ãªãã®ã§ããšã©ãŒã«ã€ããŠã¯è©³ãã調ã¹ãŸããã§ããã衚瀺ããã7ã€ã®ãšã©ãŒã®ãã¡7ã€ãä¿®æ£ãããŸããã ãããã£ãŠããã®èšäºïŒãŸãã¯ãããã®äžéšïŒã«èšèŒãããŠãããšã©ãŒãèªãã§ã泚æããŠãä¿®æ£ããããšã¯æããã§ãã
ç§ã®èšäºã圹ã«ç«ã¡ãTizenãããžã§ã¯ããå°ãªããšãå°ãè¯ããªã£ãããšãå¬ããæããŸãã ãªãå°ãïŒ ç§ã¯ãã®OSã®ã³ãŒãã®3.3ïŒ ã ããåæããããã«ç¿åŸããããã§ãã
èªè ã«è³ªåããããããããŸããããªããããã®ãšã©ãŒã¯ç§ã«æ£ç¢ºã«ä¿®æ£ãããã®ã§ããããïŒ ãããã®ãšã©ãŒã¯ãã¹ãŠãéçºè èªèº«ãæ°ã¥ããããä»ã®ããŒã«ã䜿çšããŠçºèŠãããå¯èœæ§ããããŸãã ä»ã«ã©ããªããŒã«ããããŸããïŒ ã¯ãã誰ã§ãïŒ å°ãªããšãSvaceéçã¢ãã©ã€ã¶ãŒã䜿çšããŠãã ããã
Svaceã¯ãSamsungãè³éãæäŸããISP RASã§éçºãããTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãšã©ãŒæ€åºã«ç¹åããéçã³ãŒãã¢ãã©ã€ã¶ãŒã§ãã ããšãã°ãæè¿ãã®ã¢ãã©ã€ã¶ãŒã¯èšäºã ClickHouseãµã³ãã«ã䜿çšããéçã³ãŒãã¢ãã©ã€ã¶ãŒ ãïŒ o6CuFl2Q ïŒã§èšåãããŸããã
ã¯ããTizenOSéçºè ããŒã¿ã«ã§ã¯ ãSvaceã䜿çšããŠããã°ã©ã ã®ãœãŒã¹ã³ãŒãã®ãšã©ãŒãæ€åºããããšãæšå¥šããŠããŸãã ãã®ããããã®ããŒãžã§ã³ã¯éåžžã«ä¿¡ããããŸãã
sayingã«ããããã«ããããªãã®èšŒæ ã¯äœã§ãããïŒ
å¥ã®ã¢ãã©ã€ã¶ãŒã§ã¯ãªããPVS-Studioã®ãããã§ãšã©ãŒãæ£ç¢ºã«ä¿®æ£ããããšå€æããã®ã¯ãªãã§ããïŒ
ããïŒ ãã®ã¡ãªãããPVS-Studioã§ããããšã¯ç°¡åã«èšŒæã§ããŸãïŒ
ãã§ã«æžããããã«ãã³ãŒãã®3.3ïŒ ã«é¢é£ããèŠåã¯ååã§ããã ããããç§ã®åããªããªã£ãã ãã ããåœæã®ã¢ãã©ã€ã¶ãŒã¯ã³ãŒãã®3.3ïŒ ã§ã¯ãªããçŽ5ïŒ ããã§ãã¯ããŠããŸããã ãããã®æªçµã¿ç«ãŠã®ã¬ããŒãã¯ãŸã ãããŸãã
ãããã調ã¹ãŠãèšäºã§èª¬æããªãã£ããšã©ãŒã®ã©ã€ããã¹ããªã調ã¹ãŠã¿ãŸãããã
ãã®ããããã®èšäºã®å·çæç¹ã§ã¯èŠãŠããªãã£ãã¬ããŒããã©ã³ãã ã«éããä¿®æ£ã«å€ãã説åŸåã®ãããšã©ãŒãæ¢ããŸãã amd-0.6.5ãããžã§ã¯ãããå§ããŸãã ååã¯AMDãšèšã£ãŠããŸããããã®ã³ãŒãã¯TizenãæããSamsungã®éçºè ã«ãã£ãŠäœæãããŸããã ããã¯ãåé ã®ã³ã¡ã³ãããæããã§ãã
// Copyright©2000-2017 Samsung Electronics Co.ãLtd. ç¡æè€åã»è»¢èŒãçŠããŸãã
æåã®ä¿®æ£ãããŠããªããšã©ãŒïŒç§ã¯ããã«ã€ããŠæžããŠããªãã®ã§ïŒ
ã ãããå€ãã³ãŒãã§ã¯ãç§ã¯èŠãïŒ
static int __get_instance_info(bundle *kb, struct instance_info *info) { .... gchar *query; .... if (query == NULL || query + 1 == NULL) { .... }
PVS-StudioèŠåïŒV694æ¡ä»¶ïŒã¯ãšãª+ 1 == NULLïŒã¯ããšã«ããæªå®çŸ©ã®åäœã§ãããã€ã³ã¿ãŒãªãŒããŒãããŒãããå Žåã«ã®ã¿çã§ãã amd_request.c 1083
åŒ "query + 1 == NULL"ã¯ããã€ã³ã¿ãŒããªãŒããŒãããŒããå Žåã«ã®ã¿çã«ãªããŸãã ããã¯ã§ããŸãããããã¯æªå®çŸ©ã®åäœã§ãã ãã®ã³ãŒãã«ã¯æããã«äœãåé¡ããããŸãã
ç§ã¯æ°ãã«æ±²ã¿åºãããã³ãŒããèŠãŸãã __get_instance_infoé¢æ°ã¯amd_rua.cãã¡ã€ã«ã«ç§»è¡ãããŸããã ãã ããæ¬è³ªã¯å€ãã£ãŠãããããšã©ãŒã¯ãã®ãŸãŸæ®ããŸãã
if (query == NULL || query + 1 == NULL) {
2çªç®ã®ä¿®æ£ãããŠããªããšã©ãŒïŒç§ã¯ããã«ã€ããŠæžããŠããªãããïŒ
ãããžã§ã¯ãattach-panel-camera-0.1.0ã
#define startfunc LOGD("+- START -------------------------"); #define endfunc LOGD("+- END --------------------------"); static Eina_Bool _main_view_send_result_after_transform(void *data) { startfunc main_view *view = (main_view *)data; if (view->transformtype == CAM_TRANSFORM_CROP) { DBG("crop completed, Start resize"); _main_view_ug_send_result(view, view->filename); _main_view_start_camera_preview(view->camera); view->transformtype = CAM_TRANSFORM_NONE; } return ECORE_CALLBACK_CANCEL; // <= endfunc // <= }
PVS-StudioèŠåïŒV779å°éäžèœã³ãŒããæ€åºãããŸããã ãšã©ãŒãååšããå¯èœæ§ããããŸãã main-view.c 261
å°éäžèœã³ãŒãã ãã®ã³ã°é¢æ°ã®åŒã³åºãã¯ã returnã¹ããŒãã¡ã³ãã®äžã«ç§»åããå¿ èŠããããŸãã æ°é®®ãªã³ãŒãã調ã¹ãŸãã äœãå€ãã£ãŠããªãã誰ããšã©ãŒãèŠã€ããŠããªãïŒ
return ECORE_CALLBACK_CANCEL; // <= endfunc // <= }
3çªç®ã®æªä¿®æ£ãšã©ãŒïŒç§ã¯ããã«ã€ããŠæžããŠããªãããïŒ
ãããžã§ã¯ãaul-0.6.7ã
static gboolean run_func(void *data) { callfunc(cmd); if (strcmp(cmd, "launch_res") == 0 || strcmp(cmd, "all") == 0 || strcmp(cmd, "dbuslaunch") == 0 || strcmp(cmd, "listen_app_status") == 0 // <= || strcmp(cmd, "open_svc_res") == 0 || strcmp(cmd, "listen_app_status") == 0) // <= return 0; else g_main_loop_quit(mainloop); return 0; }
PVS-Studioã®èŠåïŒV501ã||ãã®å·Šå³ã«ãstrcmpïŒcmdã "listen_app_status"ïŒ== 0ããšåãå¯æ¬¡åŒããããŸãã æŒç®åã aul_test.c 898
æååã¯ãlisten_app_statusããš2åæ¯èŒãããŸãã 1ã€ã®æ¯èŒã¯äžå¿ èŠã§ããããä»ã®æ¯èŒãšæ¯èŒããå¿ èŠããããŸããã
ãœãŒã¹ã³ãŒãã®æ°ããããŒãžã§ã³ã§ã¯ãäœãå€æŽãããŠãããããšã©ãŒãçºçããŠããŸãã
ããã蚌æ ã§ãã
çç±ãããããŸããã ãã®èšäºã§èª¬æããªãã£ããšã©ãŒã¯ãTizenã³ãŒãã§åŒãç¶ãçºçããŸãã
æ®å¿µãªãããTizenéçºã³ãã¥ããã£ã¯PVS-Studioã«äœããã®é¢ã§æ £ã芪ããã§ããŸããã ã¯ããããããèšäºã®æ å ±ã«åºã¥ããŠæ°çŸã®ãšã©ãŒãä¿®æ£ããŸããã ãããããã以äžå ã«ã¯è¡ããŸããã§ããã 誰ãç§ã«å¯Ÿå¿ãããã¢ãã©ã€ã¶ãŒã䜿çšããå¯èœæ§ã«ã€ããŠè°è«ããŸããã§ããã ãããã察å¿ã¯ãããŸããããããçš®ã®èª¬åŸåããªããèå³ããããŸããã§ããã
ãã®çµæãæ°çŸã®ãšã©ãŒãä¿®æ£ãããŸããã ãããŠãäœåãã®ä¿®æ£ãå¯èœã§ãïŒ
ãã®ãããéçã³ãŒãåæãæ®åããããããæ£ãã䜿çšããæ¹æ³ãåŠã¶ããšãéåžžã«éèŠã§ãã ã³ãŒãã®3ïŒ ãç·šéããæ®ãã®97ïŒ ã®ãšã©ãŒã®éåœã«é¢å¿ããªãããšã¯éå¹ççã§ãã äžè¬ã«ã1åéãã®ãã§ãã¯ã¯ç¡å¹ã§ããéçã¢ãã©ã€ã¶ãŒãå®æçã«äœ¿çšããå¿ èŠããããŸãã
äžè¬çã«ãããã¯ãªããšãªãæ²ããããšã§ãã
ç§ã¯èŠçŽããééãã«ã€ããŠæ²ãã¿ãããäžåºŠã³ãŒãã®ãšã©ãŒã®ã¬ãã¥ãŒã«èŽè¡ã®æ³šæãåŒããããšæããŸããã ç§ã¯äŒè°ã§ã®ã¹ããŒãã§ããããã¹ãŠã®ãããã¯ã«è§Šãããã£ãã
ãããã°ã©ã ã®åæãã¢ããªã³ã°ãå€æã®ããã®æè¡ãã®ãããªé©åãªã€ãã³ãããé¢ããããšã¯å¥åŠã§ãã ããã«ãåªããå®çšçãªçµæãåŸãããããã æçµçã«ããã·ã¢ã§ã¯ãã®åéã«é¢äžããŠãã人ã¯ã»ãšãã©ããŸããã
ç§åŠçãªç³è«æžãæåºã§ããªãããšã«å€±æããŸããã Habrahabrã§æžãããšãLinux.org.ruã§æ°žç¶çã«ããããšããããŠç§åŠè«æã®åœ¢åŒã§äœããè¿°ã¹ãããšã¯ãŸã£ããå¥ã®ããšã§ã:)ã çµæ-æåŠãããã¬ãã¥ãŒïŒ
æåã®ã¬ãã¥ã¢ãŒããã®ãã£ãŒãããã¯ã
ãTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãœãŒã¹ã³ãŒãã®ãšã©ãŒãèŠã€ããããã®éçåæã®æ¹æ³è«ãšããŒã«ã®å®çšçãªäœ¿çšããšããèšäºã®ãããã¯ã¯ãäŒè°ã®ã»ã¯ã·ã§ã³ã®ãããã¯ãšå®å
šã«äžèŽããŠããŸãã ãã ãããã®èšäºã®ããã¹ãã«ã¯ãéçåæã®æ¹æ³è«ã®èª¬æãæŠèŠãããã³éçåæããŒã«ã䜿çšããŠãœãŒã¹ã³ãŒãå
ã®ãšã©ãŒãèŠã€ããæ¹æ³ã¯å«ãŸããŠããŸããã
ãã®èšäºã§ã¯ãTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã³ãŒãããŒã¹ã®ãµãã»ãããéžæããŠçŽ900åã®èŠåãéžæãããšïŒæ£ç¢ºãªæ°ã¯ç€ºããããå®éã®ãšã©ãŒã«é¢ããèŠåãéžæããæ¹æ³ã¯ç€ºãããŠããŸããïŒããšã©ãŒå¯åºŠã¯ãœãŒã¹ã³ãŒã1000è¡ããã0.37ã§ãããšçµè«ä»ããããŠããŸãèšäºã§ãã以äžã®å®èšŒã¯ãããŸããã
èšäºã®æ®ãã®éšåã§ã¯ãéçã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ€åºããã5ã€ã®ãšã©ãŒã«ã€ããŠèª¬æããŸãã ããã«ãèšäºã®ããã¹ãããããã®ã¢ãã©ã€ã¶ãŒã¯ãSvaceéçã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ¢ã«æ€èšŒãããTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã³ãŒãããã§ãã¯ããããã«äœ¿çšããããšçµè«ä»ããããšãã§ããŸãã ãåŒã¯åžžã«falseã«èšç®ããããïŒCWE-570ïŒãªã©ã®ãšã©ãŒã¯ãTypoããšåŒã°ããããã以äžäœ¿çšããã«å€æ°ãå²ãåœãŠããïŒCWE-563ïŒãªã©ã®ãšã©ãŒã¯ãè«çãšã©ãŒããšåŒã°ãããšã©ãŒã¯ãæªæ€èšŒã®æ»ãå€NULLã«ãããšãnullãã€ã³ã¿ãŒã®éåç §ã«ã€ãªãããŸããïŒCWE-690ïŒãã®èšäºã¯ãmallocé¢æ°ã®æ»ãå€ã®NULLãã§ãã¯ãå®è¡ãããªãå Žåã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããããšããäžåœãªçµè«ãåºããŸããããã®ãããªãã§ãã¯ã¯ãããŸãïŒ NULLã®mallocé¢æ°ã®æ»ãå€ããã§ãã¯ããããã®çµ±èšãæäŸãããŸãïŒã
èšäºã®æåŸã«ãTizenãœãŒã¹ã³ãŒãã®éçåæã®çµæã«åºã¥ããçµ±èšãªãã®å€æ°ã®å€æ§ãªãšã©ãŒã®çºèŠã«ã€ããŠãäžåœãªçµè«ãåºãããŠããŸãã è€æ°ã®ã³ãŒãåæããŒã«ã䜿çšããå¿ èŠæ§ã«é¢ããèšäºã®çµè«ã¯ãè€æ°ã®ããŒã«ã®äœ¿çšãã³ãŒãã®æé«ã®ä¿¡é Œæ§ãä¿èšŒãããšãã声æãšåæ§ã«ã決ããŠæ£åœåãããŸããã
äžèšã«é¢é£ããŠããã®èšäºã®äž»åŒµãšçµè«ã¯ååã«ç«èšŒãããŠããªããšçµè«ä»ããããšãã§ããŸãã ç§åŠçãªèŠ³ç¹ããã¯ããã®èšäºã«ã¯èå³ããããŸããã ãã®èšäºã«ã¯ãèè ãåŒçšããæ å ±æºã¯ãªã¹ããããŠããŸããã èšäºã®ããã¹ãã¯äžæ³šæã«äœæãããŠãããäŒè°ã§ã®æ€èšã®ããã«åãå ¥ããããèšäºã®ããã¹ãã®ãã¶ã€ã³ã®èŠä»¶ãæºãããŠããŸããã
ãã®èšäºã§ã¯ãTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã³ãŒãããŒã¹ã®ãµãã»ãããéžæããŠçŽ900åã®èŠåãéžæãããšïŒæ£ç¢ºãªæ°ã¯ç€ºããããå®éã®ãšã©ãŒã«é¢ããèŠåãéžæããæ¹æ³ã¯ç€ºãããŠããŸããïŒããšã©ãŒå¯åºŠã¯ãœãŒã¹ã³ãŒã1000è¡ããã0.37ã§ãããšçµè«ä»ããããŠããŸãèšäºã§ãã以äžã®å®èšŒã¯ãããŸããã
èšäºã®æ®ãã®éšåã§ã¯ãéçã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ€åºããã5ã€ã®ãšã©ãŒã«ã€ããŠèª¬æããŸãã ããã«ãèšäºã®ããã¹ãããããã®ã¢ãã©ã€ã¶ãŒã¯ãSvaceéçã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ¢ã«æ€èšŒãããTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã³ãŒãããã§ãã¯ããããã«äœ¿çšããããšçµè«ä»ããããšãã§ããŸãã ãåŒã¯åžžã«falseã«èšç®ããããïŒCWE-570ïŒãªã©ã®ãšã©ãŒã¯ãTypoããšåŒã°ããããã以äžäœ¿çšããã«å€æ°ãå²ãåœãŠããïŒCWE-563ïŒãªã©ã®ãšã©ãŒã¯ãè«çãšã©ãŒããšåŒã°ãããšã©ãŒã¯ãæªæ€èšŒã®æ»ãå€NULLã«ãããšãnullãã€ã³ã¿ãŒã®éåç §ã«ã€ãªãããŸããïŒCWE-690ïŒãã®èšäºã¯ãmallocé¢æ°ã®æ»ãå€ã®NULLãã§ãã¯ãå®è¡ãããªãå Žåã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããããšããäžåœãªçµè«ãåºããŸããããã®ãããªãã§ãã¯ã¯ãããŸãïŒ NULLã®mallocé¢æ°ã®æ»ãå€ããã§ãã¯ããããã®çµ±èšãæäŸãããŸãïŒã
èšäºã®æåŸã«ãTizenãœãŒã¹ã³ãŒãã®éçåæã®çµæã«åºã¥ããçµ±èšãªãã®å€æ°ã®å€æ§ãªãšã©ãŒã®çºèŠã«ã€ããŠãäžåœãªçµè«ãåºãããŠããŸãã è€æ°ã®ã³ãŒãåæããŒã«ã䜿çšããå¿ èŠæ§ã«é¢ããèšäºã®çµè«ã¯ãè€æ°ã®ããŒã«ã®äœ¿çšãã³ãŒãã®æé«ã®ä¿¡é Œæ§ãä¿èšŒãããšãã声æãšåæ§ã«ã決ããŠæ£åœåãããŸããã
äžèšã«é¢é£ããŠããã®èšäºã®äž»åŒµãšçµè«ã¯ååã«ç«èšŒãããŠããªããšçµè«ä»ããããšãã§ããŸãã ç§åŠçãªèŠ³ç¹ããã¯ããã®èšäºã«ã¯èå³ããããŸããã ãã®èšäºã«ã¯ãèè ãåŒçšããæ å ±æºã¯ãªã¹ããããŠããŸããã èšäºã®ããã¹ãã¯äžæ³šæã«äœæãããŠãããäŒè°ã§ã®æ€èšã®ããã«åãå ¥ããããèšäºã®ããã¹ãã®ãã¶ã€ã³ã®èŠä»¶ãæºãããŠããŸããã
2人ç®ã®ã¬ãã¥ã¢ãŒã«ããã¬ãã¥ãŒã
ãã®èšäºã«ã¯ãéçã¢ãã©ã€ã¶ãŒã«ãã£ãŠTizenãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãœãŒã¹ã³ãŒãã§èŠã€ãã£ãå€ãã®ãšã©ãŒã®èª¬æãå«ãŸããŠããŸãã Tizenã®ãã¹ãã«ã¯éç解æããã§ã«äœ¿çšãããŠãããããããã€ãã®ããŒã«ã䜿çšããå¿
èŠããããšçµè«ä»ããããŠããŸãã
æ®å¿µãªããããã®èšäºã«ã¯åæããŒã«ãå€æããããã®è©³çŽ°ã¯å«ãŸããŠããŸããã
-éçåæã¢ã«ãŽãªãºã ã®å®è£ ã¯ãããŸããïŒèŠã€ãã£ããšã©ãŒã«åºã¥ããŠããããã¯æ§æããªãŒã®åçŽãªãã§ãã¯ã§ãããšçµè«ä»ããããšãã§ããŸãïŒã
-ãã¹ãçµæïŒçã®å¿çã¬ãã«ãã¹ã±ãŒã©ããªãã£ãªã©ïŒã¯ãããŸããã
ããã€ãã®ããŒã«ã䜿çšããããšã®æãŸããã«é¢ããèšäºã®çµè«ã¯ãäžèšã®èª¬æã«åŸãããCoverity Preventã¯ã©ã¹ã®ããŒã«ã«åœãŠã¯ãŸããŸãã ASTãã§ãã¯ã®å Žåãããããã¹ãŠã1ã€ã®ããŒã«ã§å®è£ ã§ããŸãã
Tizenã®ãšã©ãŒå¯åºŠã«é¢ããèšäºã®çµè«ãééã£ãŠããŸãããã®å Žåããã§ãã¯ããããšã©ãŒã®æ°ããã®åçŽãªå€æ¿ã¯æ©èœããªãããã§ãã
ãã®çµæããã®èšäºã«ã¯è²Žéãªæ å ±ãæ²èŒãããŠãããããšã©ãŒããããããã«ç§åŠèšäºã§ããããŸããã åæã¢ã«ãŽãªãºã ã®èª¬æãTizenãªã©ã®å€§èŠæš¡ãããžã§ã¯ããžã®é©çšã®é£ããããã®ããŒãã§è¡ãããäœæ¥ãªã©ã«çŠç¹ãåœãŠãæ¹ãé©åã§ãã
æ®å¿µãªããããã®èšäºã«ã¯åæããŒã«ãå€æããããã®è©³çŽ°ã¯å«ãŸããŠããŸããã
-éçåæã¢ã«ãŽãªãºã ã®å®è£ ã¯ãããŸããïŒèŠã€ãã£ããšã©ãŒã«åºã¥ããŠããããã¯æ§æããªãŒã®åçŽãªãã§ãã¯ã§ãããšçµè«ä»ããããšãã§ããŸãïŒã
-ãã¹ãçµæïŒçã®å¿çã¬ãã«ãã¹ã±ãŒã©ããªãã£ãªã©ïŒã¯ãããŸããã
ããã€ãã®ããŒã«ã䜿çšããããšã®æãŸããã«é¢ããèšäºã®çµè«ã¯ãäžèšã®èª¬æã«åŸãããCoverity Preventã¯ã©ã¹ã®ããŒã«ã«åœãŠã¯ãŸããŸãã ASTãã§ãã¯ã®å Žåãããããã¹ãŠã1ã€ã®ããŒã«ã§å®è£ ã§ããŸãã
Tizenã®ãšã©ãŒå¯åºŠã«é¢ããèšäºã®çµè«ãééã£ãŠããŸãããã®å Žåããã§ãã¯ããããšã©ãŒã®æ°ããã®åçŽãªå€æ¿ã¯æ©èœããªãããã§ãã
ãã®çµæããã®èšäºã«ã¯è²Žéãªæ å ±ãæ²èŒãããŠãããããšã©ãŒããããããã«ç§åŠèšäºã§ããããŸããã åæã¢ã«ãŽãªãºã ã®èª¬æãTizenãªã©ã®å€§èŠæš¡ãããžã§ã¯ããžã®é©çšã®é£ããããã®ããŒãã§è¡ãããäœæ¥ãªã©ã«çŠç¹ãåœãŠãæ¹ãé©åã§ãã
ç§ã¯èšäºãäžååã«æžãããããšãèªããŸãã å°ãæ°ã«ãªãç¹ã¯ãããã®èšäºã«ã¯åæããŒã«ãå€æããããã®è©³çŽ°ãå«ãŸããŠããªãããšããããšã ãã§ãã ããã§ã¯ãã©ãããã°PVS-Studioã§ãããšæžãããšãã§ããŸããïŒ èè ãAndrey Karpovã§ããããšã¯ããã«æããã«ãªããŸããããã¯ãç³è«ãæåºããéã®å¿åã®æ¡ä»¶ã«éåããŠããããšã§ãã
ãã ããå¿åæ§ã¯ååšããŸãããPVS-Studioã®è³ã¯ã©ãã«ã§ãããã27,000ã®ãšã©ãŒã«é¢ããèšäºããããŸã:)ã æ ¡é²è ãæšæž¬ã§ããªãã£ãããšã¯å¥åŠã§ãã ããã¯ãéç解æã®å°é家ããŸã£ããå°é家ã§ã¯ãªãããšãå€æããããšãæå³ããŸãã ãŸãã¯åœŒã¯æšæž¬ããŸãããã...ïŒ :)
ãŸãã ãã©ããŒããã£ããç§ã¯èªããã 次åã¯ãçç±ãããã°ãã£ãšè¯ãããããšæããŸãã
ãæž èŽããããšãããããŸããã Tizenéçºè ãšããŠæ¯ãèããªãã§ãã ããã1åéãã®ãã§ãã¯ã®çµæã«åºã¥ããŠå€æŽãå ããŸãïŒããã«äžå®å šã§ãïŒã éçã¢ãã©ã€ã¶ãŒã¯éçºããã»ã¹ã§ããã«å®è£ ããå¿ èŠããããPVS-Studioã¯ã¹ã ãŒãºãªçµ±åã®å¯èœæ§ãæäŸããŸãã ãã¹ãŠã®ã³ãŒãã¬ã¹ã³ãŒãããç¥ãããŸãã
PS ISP RASã®èª°ãããã®èšäºãèªãã§ãéçã³ãŒãåæã®ãããã¯ã«é¢ããéå ¬åŒã®ã¬ããŒãã§äŒè°ãå€æ§åãããå Žåã¯ããã€ã§ãæºåãã§ããŠããŸãã