Error: GCC_ANALYZER_WARNING (CWE-401): [#def1] libthai-0.1.29/src/thbrk/brk-common.c:41:21: warning[-Wanalyzer-malloc-leak]: leak of ‘full_path(dict_dir, "thbrk", ".tri")’ libthai-0.1.29/src/thbrk/brk-common.c:48:1: enter_function: entry to ‘brk_load_default_dict’ libthai-0.1.29/src/thbrk/brk-common.c:55:8: branch_true: following ‘true’ branch (when ‘dict_dir’ is non-NULL)... libthai-0.1.29/src/thbrk/brk-common.c:56:22: branch_true: ...to here libthai-0.1.29/src/thbrk/brk-common.c:56:22: call_function: calling ‘full_path’ from ‘brk_load_default_dict’ libthai-0.1.29/src/thbrk/brk-common.c:56:22: return_function: returning to ‘brk_load_default_dict’ from ‘full_path’ libthai-0.1.29/src/thbrk/brk-common.c:57:21: throw: if ‘trie_new_from_file’ throws an exception... libthai-0.1.29/src/thbrk/brk-common.c:41:21: danger: ‘full_path(dict_dir, "thbrk", ".tri")’ leaks here; was allocated at [(6)](sarif:/runs/0/results/0/codeFlows/0/threadFlows/0/locations/5) # 39| full_path (const char *path, const char *name, const char *ext) # 40| { # 41|-> int full_size = strlen (path) + strlen (name) + strlen (ext) + 2; # 42| char *full_path_buff = (char *) malloc (full_size); # 43| sprintf (full_path_buff, "%s/%s%s", path, name, ext); Error: GCC_ANALYZER_WARNING (CWE-688): [#def2] libthai-0.1.29/src/thbrk/brk-common.c:43:5: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL ‘full_path_buff’ where non-null expected libthai-0.1.29/src/thbrk/brk-common.c:42:37: acquire_memory: this call could return NULL libthai-0.1.29/src/thbrk/brk-common.c:43:5: danger: argument 1 (‘full_path_buff’) from [(1)](sarif:/runs/0/results/1/codeFlows/0/threadFlows/0/locations/0) could be NULL where non-null expected # 41| int full_size = strlen (path) + strlen (name) + strlen (ext) + 2; # 42| char *full_path_buff = (char *) malloc (full_size); # 43|-> sprintf (full_path_buff, "%s/%s%s", path, name, ext); # 44| return full_path_buff; # 45| } Error: GCC_ANALYZER_WARNING (CWE-401): [#def3] libthai-0.1.29/src/thbrk/brk-maximal.c:134:5: warning[-Wanalyzer-malloc-leak]: leak of ‘brkpos_hints’ libthai-0.1.29/src/thbrk/brk-maximal.c:131:29: acquire_memory: allocated here libthai-0.1.29/src/thbrk/brk-maximal.c:132:8: branch_false: following ‘false’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:134:5: branch_false: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:134:5: throw: if ‘brk_brkpos_hints’ throws an exception... libthai-0.1.29/src/thbrk/brk-maximal.c:134:5: danger: ‘brkpos_hints’ leaks here; was allocated at [(1)](sarif:/runs/0/results/0/codeFlows/0/threadFlows/0/locations/0) # 132| if (UNLIKELY (!brkpos_hints)) # 133| goto err_nothing_done; # 134|-> brk_brkpos_hints (s, len, brkpos_hints); # 135| # 136| ws = (thwchar_t *) malloc ((len + 1) * sizeof (thwchar_t)); Error: GCC_ANALYZER_WARNING (CWE-401): [#def4] libthai-0.1.29/src/thbrk/brk-maximal.c:139:5: warning[-Wanalyzer-malloc-leak]: leak of ‘ws’ libthai-0.1.29/src/thbrk/brk-maximal.c:132:8: branch_false: following ‘false’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:134:5: branch_false: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:136:24: acquire_memory: allocated here libthai-0.1.29/src/thbrk/brk-maximal.c:137:8: branch_false: following ‘false’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:139:5: branch_false: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:139:5: throw: if ‘th_tis2uni_line’ throws an exception... libthai-0.1.29/src/thbrk/brk-maximal.c:139:5: danger: ‘ws’ leaks here; was allocated at [(3)](sarif:/runs/0/results/1/codeFlows/0/threadFlows/0/locations/2) # 137| if (UNLIKELY (!ws)) # 138| goto err_brkpos_hints_created; # 139|-> th_tis2uni_line (s, ws, len + 1); # 140| # 141| ret = brk_maximal_do_impl (ws, len, brkpos_hints, pos, n, env); Error: GCC_ANALYZER_WARNING (CWE-401): [#def5] libthai-0.1.29/src/thbrk/brk-maximal.c:438:23: warning[-Wanalyzer-malloc-leak]: leak of ‘node’ libthai-0.1.29/src/thbrk/brk-maximal.c:504:1: enter_function: entry to ‘brk_pool_node_new’ libthai-0.1.29/src/thbrk/brk-maximal.c:508:8: branch_false: following ‘false’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:514:28: branch_false: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:514:28: acquire_memory: allocated here libthai-0.1.29/src/thbrk/brk-maximal.c:515:12: branch_false: following ‘false’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:517:13: branch_false: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:517:13: call_function: calling ‘brk_shot_init’ from ‘brk_pool_node_new’ # 436| brk_shot_init (BrkShot *dst, const BrkShot *src) # 437| { # 438|-> dst->dict_state = trie_state_clone (src->dict_state); # 439| dst->str_pos = src->str_pos; # 440| dst->brk_pos = (int *) malloc (src->n_brk_pos * sizeof (int)); Error: GCC_ANALYZER_WARNING (CWE-688): [#def6] libthai-0.1.29/src/thbrk/brk-maximal.c:443:5: warning[-Wanalyzer-null-argument]: use of NULL ‘root_shot.brk_pos’ where non-null expected libthai-0.1.29/src/thbrk/brk-maximal.c:374:1: enter_function: entry to ‘brk_root_pool’ libthai-0.1.29/src/thbrk/brk-maximal.c:384:8: branch_false: following ‘false’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:386:39: branch_false: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:387:5: release_memory: ‘root_shot.brk_pos’ is NULL libthai-0.1.29/src/thbrk/brk-maximal.c:392:12: call_function: calling ‘brk_pool_node_new’ from ‘brk_root_pool’ # 441| if (UNLIKELY (!dst->brk_pos)) # 442| return -1; # 443|-> memcpy (dst->brk_pos, src->brk_pos, src->cur_brk_pos * sizeof (int)); # 444| dst->n_brk_pos = src->n_brk_pos; # 445| dst->cur_brk_pos = src->cur_brk_pos; Error: GCC_ANALYZER_WARNING (CWE-688): [#def7] libthai-0.1.29/src/thbrk/brk-maximal.c:460:5: warning[-Wanalyzer-null-argument]: use of NULL where non-null expected libthai-0.1.29/src/thbrk/brk-maximal.c:456:8: branch_true: following ‘true’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:458:41: branch_true: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:460:13: release_memory: using NULL here libthai-0.1.29/src/thbrk/brk-maximal.c:460:5: danger: argument 1 (‘*dst.brk_pos’) NULL where non-null expected # 458| src->n_brk_pos * sizeof (int)); # 459| } # 460|-> memcpy (dst->brk_pos, src->brk_pos, src->cur_brk_pos * sizeof (int)); # 461| dst->n_brk_pos = src->n_brk_pos; # 462| dst->cur_brk_pos = src->cur_brk_pos; Error: GCC_ANALYZER_WARNING (CWE-401): [#def8] libthai-0.1.29/src/thbrk/brk-maximal.c:464:1: warning[-Wanalyzer-malloc-leak]: leak of ‘**env.free_list.shot.brk_pos’ libthai-0.1.29/src/thbrk/brk-maximal.c:504:1: enter_function: entry to ‘brk_pool_node_new’ libthai-0.1.29/src/thbrk/brk-maximal.c:508:8: branch_true: following ‘true’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:511:26: branch_true: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:512:9: call_function: calling ‘brk_shot_reuse’ from ‘brk_pool_node_new’ # 462| dst->cur_brk_pos = src->cur_brk_pos; # 463| dst->penalty = src->penalty; # 464|-> } # 465| # 466| static void Error: GCC_ANALYZER_WARNING (CWE-401): [#def9] libthai-0.1.29/src/thbrk/brk-maximal.c:470:9: warning[-Wanalyzer-malloc-leak]: leak of ‘<unknown>’ libthai-0.1.29/src/thbrk/brk-maximal.c:374:1: enter_function: entry to ‘brk_root_pool’ libthai-0.1.29/src/thbrk/brk-maximal.c:384:8: branch_false: following ‘false’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:386:39: branch_false: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:392:12: call_function: calling ‘brk_pool_node_new’ from ‘brk_root_pool’ libthai-0.1.29/src/thbrk/brk-maximal.c:392:12: return_function: returning to ‘brk_root_pool’ from ‘brk_pool_node_new’ libthai-0.1.29/src/thbrk/brk-maximal.c:393:8: branch_true: following ‘true’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:394:16: call_function: inlined call to ‘brk_pool_add’ from ‘brk_root_pool’ libthai-0.1.29/src/thbrk/brk-maximal.c:397:5: call_function: calling ‘brk_shot_destruct’ from ‘brk_root_pool’ # 468| { # 469| if (shot->dict_state) # 470|-> trie_state_free (shot->dict_state); # 471| if (shot->brk_pos) # 472| free (shot->brk_pos); Error: GCC_ANALYZER_WARNING (CWE-401): [#def10] libthai-0.1.29/src/thbrk/brk-maximal.c:470:9: warning[-Wanalyzer-malloc-leak]: leak of ‘pool’ libthai-0.1.29/src/thbrk/brk-maximal.c:374:1: enter_function: entry to ‘brk_root_pool’ libthai-0.1.29/src/thbrk/brk-maximal.c:384:8: branch_false: following ‘false’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:386:39: branch_false: ...to here libthai-0.1.29/src/thbrk/brk-maximal.c:392:12: call_function: calling ‘brk_pool_node_new’ from ‘brk_root_pool’ libthai-0.1.29/src/thbrk/brk-maximal.c:392:12: return_function: returning to ‘brk_root_pool’ from ‘brk_pool_node_new’ libthai-0.1.29/src/thbrk/brk-maximal.c:393:8: branch_true: following ‘true’ branch... libthai-0.1.29/src/thbrk/brk-maximal.c:394:16: call_function: inlined call to ‘brk_pool_add’ from ‘brk_root_pool’ libthai-0.1.29/src/thbrk/brk-maximal.c:397:5: call_function: calling ‘brk_shot_destruct’ from ‘brk_root_pool’ # 468| { # 469| if (shot->dict_state) # 470|-> trie_state_free (shot->dict_state); # 471| if (shot->brk_pos) # 472| free (shot->brk_pos); Error: GCC_ANALYZER_WARNING (CWE-401): [#def11] libthai-0.1.29/src/thbrk/thbrk.c:79:21: warning[-Wanalyzer-malloc-leak]: leak of ‘brk_pos’ libthai-0.1.29/src/thbrk/thbrk.c:313:1: enter_function: entry to ‘th_brk_line’ libthai-0.1.29/src/thbrk/thbrk.c:316:12: call_function: calling ‘th_brk_insert_breaks’ from ‘th_brk_line’ # 77| dict_trie = trie_new_from_file (dictpath); # 78| } else { # 79|-> dict_trie = brk_load_default_dict (); # 80| } # 81| if (UNLIKELY (!dict_trie)) { Error: GCC_ANALYZER_WARNING (CWE-401): [#def12] libthai-0.1.29/src/thbrk/thbrk.c:79:21: warning[-Wanalyzer-malloc-leak]: leak of ‘brk’ libthai-0.1.29/src/thbrk/thbrk.c:344:1: enter_function: entry to ‘brk_get_shared_brk’ libthai-0.1.29/src/thbrk/thbrk.c:348:8: branch_true: following ‘true’ branch... libthai-0.1.29/src/thbrk/thbrk.c:349:26: call_function: calling ‘th_brk_new’ from ‘brk_get_shared_brk’ # 77| dict_trie = trie_new_from_file (dictpath); # 78| } else { # 79|-> dict_trie = brk_load_default_dict (); # 80| } # 81| if (UNLIKELY (!dict_trie)) { Error: GCC_ANALYZER_WARNING (CWE-401): [#def13] libthai-0.1.29/src/thbrk/thbrk.c:192:36: warning[-Wanalyzer-malloc-leak]: leak of ‘brk_pos’ libthai-0.1.29/src/thbrk/thbrk.c:313:1: enter_function: entry to ‘th_brk_line’ libthai-0.1.29/src/thbrk/thbrk.c:316:12: call_function: calling ‘th_brk_insert_breaks’ from ‘th_brk_line’ # 190| # 191| p = chunk = acronym_end = s; # 192|-> prev_class = effective_class = brk_class (*p); # 193| cur_pos = 0; # 194| Error: GCC_ANALYZER_WARNING (CWE-401): [#def14] libthai-0.1.29/src/thbrk/thbrk.c:195:11: warning[-Wanalyzer-malloc-leak]: leak of ‘brk_pos’ libthai-0.1.29/src/thbrk/thbrk.c:313:1: enter_function: entry to ‘th_brk_line’ libthai-0.1.29/src/thbrk/thbrk.c:316:12: call_function: calling ‘th_brk_insert_breaks’ from ‘th_brk_line’ # 193| cur_pos = 0; # 194| # 195|-> env = brk_env_new (brk ? brk : brk_get_shared_brk ()); # 196| # 197| while (*++p && cur_pos < pos_sz) { Error: GCC_ANALYZER_WARNING (CWE-401): [#def15] libthai-0.1.29/src/thbrk/thbrk.c:201:21: warning[-Wanalyzer-malloc-leak]: leak of ‘brk_pos’ libthai-0.1.29/src/thbrk/thbrk.c:313:1: enter_function: entry to ‘th_brk_line’ libthai-0.1.29/src/thbrk/thbrk.c:316:12: call_function: calling ‘th_brk_insert_breaks’ from ‘th_brk_line’ # 199| brk_op_t op; # 200| # 201|-> new_class = brk_class (*p); # 202| # 203| if (BRK_CLASS_THAI == prev_class || BRK_CLASS_ALPHA == prev_class) { Error: GCC_ANALYZER_WARNING (CWE-401): [#def16] libthai-0.1.29/src/thbrk/thbrk.c:228:25: warning[-Wanalyzer-malloc-leak]: leak of ‘brk_pos’ libthai-0.1.29/src/thbrk/thbrk.c:313:1: enter_function: entry to ‘th_brk_line’ libthai-0.1.29/src/thbrk/thbrk.c:316:12: call_function: calling ‘th_brk_insert_breaks’ from ‘th_brk_line’ # 226| int n_brk, i; # 227| # 228|-> n_brk = brk_maximal_do (chunk, p - chunk, # 229| pos + cur_pos, pos_sz - cur_pos, env); # 230| for (i = 0; i < n_brk; i++) Error: GCC_ANALYZER_WARNING (CWE-401): [#def17] libthai-0.1.29/src/thbrk/thbrk.c:250:14: warning[-Wanalyzer-malloc-leak]: leak of ‘brk_pos’ libthai-0.1.29/src/thbrk/thbrk.c:313:1: enter_function: entry to ‘th_brk_line’ libthai-0.1.29/src/thbrk/thbrk.c:316:12: call_function: calling ‘th_brk_insert_breaks’ from ‘th_brk_line’ # 248| chunk = acronym_end = p; # 249| # 250|-> op = brk_op (effective_class, new_class); # 251| # 252| switch (op) { Error: GCC_ANALYZER_WARNING (CWE-401): [#def18] libthai-0.1.29/src/thwbrk/thwbrk.c:64:5: warning[-Wanalyzer-malloc-leak]: leak of ‘brk_pos’ libthai-0.1.29/src/thwbrk/thwbrk.c:91:1: enter_function: entry to ‘th_brk_wc_insert_breaks’ libthai-0.1.29/src/thwbrk/thwbrk.c:101:8: branch_false: following ‘false’ branch (when ‘n_brk_pos <= 4611686018427387903’)... libthai-0.1.29/src/thwbrk/thwbrk.c:103:31: branch_false: ...to here libthai-0.1.29/src/thwbrk/thwbrk.c:103:23: acquire_memory: allocated here libthai-0.1.29/src/thwbrk/thwbrk.c:104:8: branch_false: following ‘false’ branch (when ‘brk_pos’ is non-NULL)... libthai-0.1.29/src/thwbrk/thwbrk.c:107:17: branch_false: ...to here libthai-0.1.29/src/thwbrk/thwbrk.c:107:17: call_function: calling ‘th_brk_wc_find_breaks’ from ‘th_brk_wc_insert_breaks’ # 62| if (!tis_str) # 63| return 0; # 64|-> th_uni2tis_line (s, tis_str, alloc_size); # 65| # 66| /* do word break */ Error: GCC_ANALYZER_WARNING (CWE-401): [#def19] libthai-0.1.29/src/thwbrk/thwbrk.c:64:5: warning[-Wanalyzer-malloc-leak]: leak of ‘tis_str’ libthai-0.1.29/src/thwbrk/thwbrk.c:149:1: enter_function: entry to ‘th_wbrk’ libthai-0.1.29/src/thwbrk/thwbrk.c:151:12: call_function: calling ‘th_brk_wc_find_breaks’ from ‘th_wbrk’ # 62| if (!tis_str) # 63| return 0; # 64|-> th_uni2tis_line (s, tis_str, alloc_size); # 65| # 66| /* do word break */ Error: GCC_ANALYZER_WARNING (CWE-401): [#def20] libthai-0.1.29/src/thwbrk/thwbrk.c:67:11: warning[-Wanalyzer-malloc-leak]: leak of ‘brk_pos’ libthai-0.1.29/src/thwbrk/thwbrk.c:91:1: enter_function: entry to ‘th_brk_wc_insert_breaks’ libthai-0.1.29/src/thwbrk/thwbrk.c:101:8: branch_false: following ‘false’ branch (when ‘n_brk_pos <= 4611686018427387903’)... libthai-0.1.29/src/thwbrk/thwbrk.c:103:31: branch_false: ...to here libthai-0.1.29/src/thwbrk/thwbrk.c:103:23: acquire_memory: allocated here libthai-0.1.29/src/thwbrk/thwbrk.c:104:8: branch_false: following ‘false’ branch (when ‘brk_pos’ is non-NULL)... libthai-0.1.29/src/thwbrk/thwbrk.c:107:17: branch_false: ...to here libthai-0.1.29/src/thwbrk/thwbrk.c:107:17: call_function: calling ‘th_brk_wc_find_breaks’ from ‘th_brk_wc_insert_breaks’ # 65| # 66| /* do word break */ # 67|-> ret = th_brk_find_breaks (brk, tis_str, pos, pos_sz); # 68| # 69| free (tis_str); Error: GCC_ANALYZER_WARNING (CWE-401): [#def21] libthai-0.1.29/src/thwstr/thwstr.c:39:9: warning[-Wanalyzer-malloc-leak]: leak of ‘norm8’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:77:35: acquire_memory: allocated here libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ # 37| return 0; # 38| # 39|-> if (th_uni2tis (*wsrc) == THCHAR_ERR) { # 40| /* skip THCHAR_ERR chunk */ # 41| int len = 0; Error: GCC_ANALYZER_WARNING (CWE-401): [#def22] libthai-0.1.29/src/thwstr/thwstr.c:39:9: warning[-Wanalyzer-malloc-leak]: leak of ‘src8’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:76:34: acquire_memory: allocated here libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ # 37| return 0; # 38| # 39|-> if (th_uni2tis (*wsrc) == THCHAR_ERR) { # 40| /* skip THCHAR_ERR chunk */ # 41| int len = 0; Error: GCC_ANALYZER_WARNING (CWE-401): [#def23] libthai-0.1.29/src/thwstr/thwstr.c:42:25: warning[-Wanalyzer-malloc-leak]: leak of ‘norm8’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:77:35: acquire_memory: allocated here libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ # 40| /* skip THCHAR_ERR chunk */ # 41| int len = 0; # 42|-> while (*wsrc && th_uni2tis (*wsrc) == THCHAR_ERR) { # 43| ++wsrc; ++len; # 44| } Error: GCC_ANALYZER_WARNING (CWE-401): [#def24] libthai-0.1.29/src/thwstr/thwstr.c:42:25: warning[-Wanalyzer-malloc-leak]: leak of ‘src8’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:76:34: acquire_memory: allocated here libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ # 40| /* skip THCHAR_ERR chunk */ # 41| int len = 0; # 42|-> while (*wsrc && th_uni2tis (*wsrc) == THCHAR_ERR) { # 43| ++wsrc; ++len; # 44| } Error: GCC_ANALYZER_WARNING (CWE-401): [#def25] libthai-0.1.29/src/thwstr/thwstr.c:51:42: warning[-Wanalyzer-malloc-leak]: leak of ‘norm8’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:77:35: acquire_memory: allocated here libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ # 49| # 50| /* convert Thai chunk */ # 51|-> while (left > 1 && *wsrc && (c = th_uni2tis (*wsrc)) != THCHAR_ERR) { # 52| *dest++ = c; ++wsrc; --left; # 53| } Error: GCC_ANALYZER_WARNING (CWE-401): [#def26] libthai-0.1.29/src/thwstr/thwstr.c:51:42: warning[-Wanalyzer-malloc-leak]: leak of ‘src8’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:76:34: acquire_memory: allocated here libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ # 49| # 50| /* convert Thai chunk */ # 51|-> while (left > 1 && *wsrc && (c = th_uni2tis (*wsrc)) != THCHAR_ERR) { # 52| *dest++ = c; ++wsrc; --left; # 53| } Error: GCC_ANALYZER_WARNING (CWE-476): [#def27] libthai-0.1.29/src/thwstr/thwstr.c:52:13: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘dest’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:76:34: acquire_memory: this call could return NULL libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ # 50| /* convert Thai chunk */ # 51| while (left > 1 && *wsrc && (c = th_uni2tis (*wsrc)) != THCHAR_ERR) { # 52|-> *dest++ = c; ++wsrc; --left; # 53| } # 54| *dest = 0; Error: GCC_ANALYZER_WARNING (CWE-476): [#def28] libthai-0.1.29/src/thwstr/thwstr.c:54:9: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘dest’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:76:34: acquire_memory: this call could return NULL libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ # 52| *dest++ = c; ++wsrc; --left; # 53| } # 54|-> *dest = 0; # 55| return n - left; /* always non-negative, null-terminator excluded */ # 56| } Error: GCC_ANALYZER_WARNING (CWE-401): [#def29] libthai-0.1.29/src/thwstr/thwstr.c:84:28: warning[-Wanalyzer-malloc-leak]: leak of ‘norm8’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:77:35: acquire_memory: allocated here libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:80:25: return_function: returning to ‘th_wnormalize’ from ‘th_wthaichunk’ libthai-0.1.29/src/thwstr/thwstr.c:82:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:84:28: branch_true: ...to here libthai-0.1.29/src/thwstr/thwstr.c:84:28: throw: if ‘th_normalize’ throws an exception... libthai-0.1.29/src/thwstr/thwstr.c:84:28: danger: ‘norm8’ leaks here; was allocated at [(2)](sarif:/runs/0/results/10/codeFlows/0/threadFlows/0/locations/1) # 82| if (chunk_len > 0) { # 83| int i; # 84|-> int norm_len = th_normalize (norm8, src8, n); # 85| for (i = 0; left > 1 && i < norm_len; ++i) { # 86| *wdest++ = th_tis2uni (norm8[i]); --left; Error: GCC_ANALYZER_WARNING (CWE-401): [#def30] libthai-0.1.29/src/thwstr/thwstr.c:84:28: warning[-Wanalyzer-malloc-leak]: leak of ‘src8’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:76:34: acquire_memory: allocated here libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:80:25: return_function: returning to ‘th_wnormalize’ from ‘th_wthaichunk’ libthai-0.1.29/src/thwstr/thwstr.c:82:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:84:28: branch_true: ...to here libthai-0.1.29/src/thwstr/thwstr.c:84:28: throw: if ‘th_normalize’ throws an exception... libthai-0.1.29/src/thwstr/thwstr.c:84:28: danger: ‘src8’ leaks here; was allocated at [(2)](sarif:/runs/0/results/9/codeFlows/0/threadFlows/0/locations/1) # 82| if (chunk_len > 0) { # 83| int i; # 84|-> int norm_len = th_normalize (norm8, src8, n); # 85| for (i = 0; left > 1 && i < norm_len; ++i) { # 86| *wdest++ = th_tis2uni (norm8[i]); --left; Error: GCC_ANALYZER_WARNING (CWE-401): [#def31] libthai-0.1.29/src/thwstr/thwstr.c:86:28: warning[-Wanalyzer-malloc-leak]: leak of ‘src8’ libthai-0.1.29/src/thwstr/thwstr.c:73:1: enter_function: entry to ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:76:34: acquire_memory: allocated here libthai-0.1.29/src/thwstr/thwstr.c:79:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:80:25: call_function: calling ‘th_wthaichunk’ from ‘th_wnormalize’ libthai-0.1.29/src/thwstr/thwstr.c:80:25: return_function: returning to ‘th_wnormalize’ from ‘th_wthaichunk’ libthai-0.1.29/src/thwstr/thwstr.c:82:12: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:84:28: branch_true: ...to here libthai-0.1.29/src/thwstr/thwstr.c:85:25: branch_true: following ‘true’ branch... libthai-0.1.29/src/thwstr/thwstr.c:86:45: branch_true: ...to here libthai-0.1.29/src/thwstr/thwstr.c:86:28: throw: if ‘th_tis2uni’ throws an exception... libthai-0.1.29/src/thwstr/thwstr.c:86:28: danger: ‘src8’ leaks here; was allocated at [(2)](sarif:/runs/0/results/11/codeFlows/0/threadFlows/0/locations/1) # 84| int norm_len = th_normalize (norm8, src8, n); # 85| for (i = 0; left > 1 && i < norm_len; ++i) { # 86|-> *wdest++ = th_tis2uni (norm8[i]); --left; # 87| } # 88| } else {
| analyzer-version-clippy | 1.92.0 |
| analyzer-version-cppcheck | 2.19.1 |
| analyzer-version-gcc | 16.0.0 |
| analyzer-version-gcc-analyzer | 16.0.0 |
| analyzer-version-shellcheck | 0.11.0 |
| analyzer-version-unicontrol | 0.0.2 |
| diffbase-analyzer-version-clippy | 1.92.0 |
| diffbase-analyzer-version-cppcheck | 2.19.1 |
| diffbase-analyzer-version-gcc | 16.0.0 |
| diffbase-analyzer-version-gcc-analyzer | 16.0.0 |
| diffbase-analyzer-version-shellcheck | 0.11.0 |
| diffbase-analyzer-version-unicontrol | 0.0.2 |
| diffbase-enabled-plugins | clippy, cppcheck, gcc, shellcheck, unicontrol |
| diffbase-exit-code | 0 |
| diffbase-host | ip-172-16-1-146.us-west-2.compute.internal |
| diffbase-known-false-positives | /usr/share/csmock/known-false-positives.js |
| diffbase-known-false-positives-rpm | known-false-positives-0.0.0.20250521.132812.g8eff701.main-1.el9.noarch |
| diffbase-mock-config | fedora-rawhide-x86_64 |
| diffbase-project-name | libthai-0.1.30-1.fc44 |
| diffbase-store-results-to | /tmp/tmpt8321jvx/libthai-0.1.30-1.fc44.tar.xz |
| diffbase-time-created | 2026-01-08 19:13:40 |
| diffbase-time-finished | 2026-01-08 19:15:06 |
| diffbase-tool | csmock |
| diffbase-tool-args | '/usr/bin/csmock' '-r' 'fedora-rawhide-x86_64' '-t' 'gcc,cppcheck,clippy,shellcheck,unicontrol' '-o' '/tmp/tmpt8321jvx/libthai-0.1.30-1.fc44.tar.xz' '--gcc-analyze' '--unicontrol-notests' '--unicontrol-bidi-only' '--install' 'pam' '--gcc-analyzer-bin=/usr/bin/gcc' '/tmp/tmpt8321jvx/libthai-0.1.30-1.fc44.src.rpm' |
| diffbase-tool-version | csmock-3.8.3.20251215.161544.g62de9a5-1.el9 |
| enabled-plugins | clippy, cppcheck, gcc, shellcheck, unicontrol |
| exit-code | 0 |
| host | ip-172-16-1-146.us-west-2.compute.internal |
| known-false-positives | /usr/share/csmock/known-false-positives.js |
| known-false-positives-rpm | known-false-positives-0.0.0.20250521.132812.g8eff701.main-1.el9.noarch |
| mock-config | fedora-rawhide-x86_64 |
| project-name | libthai-0.1.29-11.fc43 |
| store-results-to | /tmp/tmp2l33m0jh/libthai-0.1.29-11.fc43.tar.xz |
| time-created | 2026-01-08 19:11:38 |
| time-finished | 2026-01-08 19:13:33 |
| title | Fixed findings |
| tool | csmock |
| tool-args | '/usr/bin/csmock' '-r' 'fedora-rawhide-x86_64' '-t' 'gcc,cppcheck,clippy,shellcheck,unicontrol' '-o' '/tmp/tmp2l33m0jh/libthai-0.1.29-11.fc43.tar.xz' '--gcc-analyze' '--unicontrol-notests' '--unicontrol-bidi-only' '--install' 'pam' '--gcc-analyzer-bin=/usr/bin/gcc' '/tmp/tmp2l33m0jh/libthai-0.1.29-11.fc43.src.rpm' |
| tool-version | csmock-3.8.3.20251215.161544.g62de9a5-1.el9 |