Task #799 - liblouis-3.28.0-6.fc41/scan-results.err
back to task #799download
Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:80:22: warning[core.UndefinedBinaryOperatorResult]: The right operand of '!=' is a garbage value # 78| int k; # 79| for (k = 0; k < len; k++) # 80|-> if ((widechar)a[k] != b[k]) return 0; # 81| return 1; # 82| } Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:312:5: warning[deadcode.DeadStores]: Value stored to 'ch1' is never read # 310| compileError(file, # 311| "encoding is neither big-endian, little-endian nor ASCII 8."); # 312|-> ch1 = EOF; # 313| break; # 314| ; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:442:3: warning[core.NonNullParamChecker]: Null pointer passed to 1st parameter expecting 'nonnull' # 440| _lou_outOfMemory(); # 441| } # 442|-> memset(((unsigned char *)newTable) + tableSize, 0, newTableSize - tableSize); # 443| /* update references to the old table */ # 444| { Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:475:3: warning[core.NonNullParamChecker]: Null pointer passed to 1st parameter expecting 'nonnull' # 473| _lou_outOfMemory(); # 474| } # 475|-> memset(((unsigned char *)newTable) + tableSize, 0, newTableSize - tableSize); # 476| /* update references to the old table */ # 477| { Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:505:2: warning[core.NonNullParamChecker]: Null pointer passed to 1st parameter expecting 'nonnull' # 503| _lou_outOfMemory(); # 504| } # 505|-> memset(*table, 0, startSize); # 506| (*table)->tableSize = startSize; # 507| (*table)->bytesUsed = bytesUsed; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:524:2: warning[core.NonNullParamChecker]: Null pointer passed to 1st parameter expecting 'nonnull' # 522| _lou_outOfMemory(); # 523| } # 524|-> memset(*table, 0, startSize); # 525| (*table)->tableSize = startSize; # 526| (*table)->bytesUsed = bytesUsed; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:757:4: warning[deadcode.DeadStores]: Value stored to 'IC' is never read # 755| case pass_groupend: # 756| case pass_groupreplace: # 757|-> IC += 3; # 758| # 759| NO_CHARACTERS : { return 1; } Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:827:3: warning[deadcode.DeadStores]: Value stored to 'rule' is never read # 825| character = putChar(file, rule->charsdots[0], table, NULL); # 826| // putChar may have moved table, so make sure rule is still valid # 827|-> rule = (TranslationTableRule *)&(*table)->ruleArea[ruleOffset]; # 828| character->compRule = ruleOffset; # 829| return; Error: CPPCHECK_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:1197: warning[uninitvar]: Uninitialized variable: wname # 1195| int kk; # 1196| for (kk = 0; kk < length; kk++) wname[kk] = (widechar)characterClassNames[k][kk]; # 1197|-> if (!addCharacterClass(NULL, wname, length, table, 0)) { # 1198| deallocateCharacterClasses(table); # 1199| return 0; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:1597:2: warning[core.NonNullParamChecker]: Null pointer passed to 1st parameter expecting 'nonnull' # 1595| _lou_outOfMemory(); # 1596| } # 1597|-> memset(ruleName, 0, sizeof(*ruleName)); # 1598| // a name is a sequence of characters in the ranges 'a'..'z' and 'A'..'Z' # 1599| for (k = 0; k < name->length; k++) { Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2452:2: warning[core.NonNullParamChecker]: Null pointer passed to 1st parameter expecting 'nonnull' # 2450| HyphenHashTab *hashTab; # 2451| if (!(hashTab = malloc(sizeof(HyphenHashTab)))) _lou_outOfMemory(); # 2452|-> memset(hashTab, 0, sizeof(HyphenHashTab)); # 2453| return hashTab; # 2454| } Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2476:10: warning[core.NullDereference]: Access to field 'next' results in a dereference of a null pointer (loaded from variable 'e') # 2474| i = hyphenStringHash(key) % HYPHENHASHSIZE; # 2475| if (!(e = malloc(sizeof(HyphenHashEntry)))) _lou_outOfMemory(); # 2476|-> e->next = hashTab->entries[i]; # 2477| e->key = malloc((key->length + 1) * CHARSIZE); # 2478| if (!e->key) _lou_outOfMemory(); Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2477:11: warning[unix.MallocSizeof]: Result of 'malloc' is converted to a pointer of type 'CharsString', which is incompatible with sizeof operand type 'widechar' # 2475| if (!(e = malloc(sizeof(HyphenHashEntry)))) _lou_outOfMemory(); # 2476| e->next = hashTab->entries[i]; # 2477|-> e->key = malloc((key->length + 1) * CHARSIZE); # 2478| if (!e->key) _lou_outOfMemory(); # 2479| e->key->length = key->length; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2479:17: warning[core.NullDereference]: Access to field 'length' results in a dereference of a null pointer (loaded from field 'key') # 2477| e->key = malloc((key->length + 1) * CHARSIZE); # 2478| if (!e->key) _lou_outOfMemory(); # 2479|-> e->key->length = key->length; # 2480| for (j = 0; j < key->length; j++) e->key->chars[j] = key->chars[j]; # 2481| e->val = val; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2509:46: warning[core.NullDereference]: Dereference of null pointer # 2507| realloc(dict->states, (dict->numStates << 1) * sizeof(HyphenationState)); # 2508| if (!dict->states) _lou_outOfMemory(); # 2509|-> dict->states[dict->numStates].hyphenPattern = 0; # 2510| dict->states[dict->numStates].fallbackState = DEFAULTSTATE; # 2511| dict->states[dict->numStates].numTrans = 0; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2541:12: warning[deadcode.DeadStores]: Value stored to 'k' during its initialization is never read # 2539| char pattern[MAXSTRING + 1]; # 2540| unsigned int stateNum = 0, lastState = 0; # 2541|-> int i, j, k = encoding->length; # 2542| widechar ch; # 2543| int found; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2554:31: warning[core.NullDereference]: Dereference of null pointer # 2552| dict.states = malloc(sizeof(HyphenationState)); # 2553| if (!dict.states) _lou_outOfMemory(); # 2554|-> dict.states[0].hyphenPattern = 0; # 2555| dict.states[0].fallbackState = DEFAULTSTATE; # 2556| dict.states[0].numTrans = 0; Error: COMPILER_WARNING (CWE-1164): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2742:1: warning[-Wunused-function]: 'cons_macro' defined but not used # 2742 | cons_macro(const Macro *head, const MacroList *tail) { # | ^~~~~~~~~~ # 2740| */ # 2741| static const MacroList * # 2742|-> cons_macro(const Macro *head, const MacroList *tail) { # 2743| MacroList *list = malloc(sizeof(MacroList)); # 2744| list->head = head; Error: COMPILER_WARNING (CWE-1164): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c: scope_hint: At top level liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2778:1: warning[-Wunused-function]: 'compileMacro' defined but not used # 2778 | compileMacro(FileInfo *file, const Macro **macro) { # | ^~~~~~~~~~~~ # 2776| */ # 2777| static int # 2778|-> compileMacro(FileInfo *file, const Macro **macro) { # 2779| # 2780| // parse name Error: COMPILER_WARNING (CWE-563): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c: scope_hint: In function 'compileRule' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2894:30: warning[-Wunused-variable]: unused variable 'macro' # 2894 | const Macro *macro; # | ^~~~~ # 2892| switch (opcode) { # 2893| case CTO_Macro: { # 2894|-> const Macro *macro; # 2895| #ifdef ENABLE_MACROS # 2896| if (!inScopeMacros) { Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:2999:7: warning[unix.Malloc]: Potential leak of memory pointed to by 'arguments' # 2997| } # 2998| if (argument_count < m->argument_count) { # 2999|-> compileError(file, "Expected %d arguments", m->argument_count); # 3000| return 0; # 3001| } Error: COMPILER_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c: scope_hint: In function '_lou_defaultTableResolver' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:4641:51: warning[-Wformat-overflow=]: '__sprintf_chk' may write a terminating nul past the end of the destination # 4641 | sprintf(tableFile, "%s%c%s", dir, DIR_SEP, table); # | ^ /usr/include/bits/stdio2.h:30:10: note: '__sprintf_chk' output 2 or more bytes (assuming 4097) into a destination of size 4096 # 30 | return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1, # | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 31 | __glibc_objsize (__s), __fmt, # | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 32 | __va_arg_pack ()); # | ~~~~~~~~~~~~~~~~~ # 4639| goto failure; # 4640| } # 4641|-> sprintf(tableFile, "%s%c%s", dir, DIR_SEP, table); # 4642| if (stat(tableFile, &info) == 0 && !(info.st_mode & S_IFDIR)) { # 4643| _lou_logMessage(LOU_LOG_DEBUG, "found table %s", tableFile); Error: COMPILER_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c: scope_hint: In function '_lou_defaultTableResolver' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:4653:57: warning[-Wformat-overflow=]: '%s' directive writing up to 4078 bytes into a region of size between 1 and 4079 # 4653 | sprintf(tableFile, "%s%c%s%c%s%c%s", dir, DIR_SEP, "liblouis", DIR_SEP, # | ^~ /usr/include/bits/stdio2.h:30:10: note: '__sprintf_chk' output between 18 and 8174 bytes into a destination of size 4096 # 30 | return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1, # | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 31 | __glibc_objsize (__s), __fmt, # | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 32 | __va_arg_pack ()); # | ~~~~~~~~~~~~~~~~~ # 4651| goto failure; # 4652| } # 4653|-> sprintf(tableFile, "%s%c%s%c%s%c%s", dir, DIR_SEP, "liblouis", DIR_SEP, # 4654| "tables", DIR_SEP, table); # 4655| if (stat(tableFile, &info) == 0 && !(info.st_mode & S_IFDIR)) { Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:4693:3: warning[deadcode.DeadStores]: Value stored to 'cp' is never read # 4691| } # 4692| #else # 4693|-> cp += sprintf(cp, ",%s", TABLESDIR); # 4694| #endif # 4695| } Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:4744:25: warning[core.NullDereference]: Array access (from variable 'tableFiles') results in a null pointer dereference # 4742| last = (*cp == '\0'); # 4743| *cp = '\0'; # 4744|-> if (!(tableFiles[k++] = resolveSubtable(subTable, base, searchPath))) { # 4745| char *path; # 4746| _lou_logMessage(LOU_LOG_ERROR, "Cannot resolve table '%s'", subTable); Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/compileTranslationTable.c:5151:20: warning[core.NullDereference]: Access to field 'next' results in a dereference of a null pointer (loaded from variable 'newEntry') # 5149| DisplayTableChainEntry *newEntry = malloc(entrySize); # 5150| if (!newEntry) _lou_outOfMemory(); # 5151|-> newEntry->next = displayTableChain; # 5152| newEntry->table = newDisplayTable; # 5153| newEntry->tableListLength = displayTableListLen; Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/logging.c: scope_hint: In function '_lou_logWidecharBuf' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/logging.c:54:58: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'logMsg' # 52| else # 53| formatString = "0x%08X "; # 54|-> for (i = 0; i < (int)strlen(msg); i++) logMsg[i] = msg[i]; # 55| p += strlen(msg); # 56| for (i = 0; i < wlen; i++) { Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_backTranslateString.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_backTranslateString.c:269:3: warning[core.uninitialized.ArraySubscript]: Array subscript is undefined # 267| break; # 268| } # 269|-> passPosMapping[realInlen] = output.length; # 270| if (passPosMapping == posMapping) { # 271| passPosMapping = posMapping2; Error: COMPILER_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_backTranslateString.c: scope_hint: In function '_lou_backTranslate' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_backTranslateString.c:269:31: warning[-Wmaybe-uninitialized]: 'realInlen' may be used uninitialized # 269 | passPosMapping[realInlen] = output.length; # | ^ liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_backTranslateString.c:251:21: note: 'realInlen' was declared here # 251 | int realInlen; # | ^~~~~~~~~ # 267| break; # 268| } # 269|-> passPosMapping[realInlen] = output.length; # 270| if (passPosMapping == posMapping) { # 271| passPosMapping = posMapping2; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_backTranslateString.c:271:19: warning[core.uninitialized.Assign]: Assigned value is garbage or undefined # 269| passPosMapping[realInlen] = output.length; # 270| if (passPosMapping == posMapping) { # 271|-> passPosMapping = posMapping2; # 272| if (realInlen < input.length) *inlen = realInlen; # 273| } else { Error: COMPILER_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_backTranslateString.c:611:13: warning[-Wmaybe-uninitialized]: 'multindRule' may be used uninitialized # 611 | if (handleMultind(table, currentDotslen, currentOpcode, currentRule, doingMultind, # | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 612 | *multindRule)) # | ~~~~~~~~~~~~~ liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_backTranslateString.c: scope_hint: In function '_lou_backTranslate' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_backTranslateString.c:1095:37: note: 'multindRule' was declared here # 1095 | const TranslationTableRule *multindRule; # | ^~~~~~~~~~~ # 609| const TranslationTableCharacter *dots = getDots(input->chars[pos], table); # 610| int tryThis; # 611|-> if (handleMultind(table, currentDotslen, currentOpcode, currentRule, doingMultind, # 612| *multindRule)) # 613| return; Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CPPCHECK_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:202: error[ctuuninitvar]: Using argument transCharslen that points at uninitialized variable transCharslen # 200| int *passIC, PassRuleMatch *match, TranslationTableRule **groupingRule, # 201| widechar *groupingOp) { # 202|-> int save_transCharslen = *transCharslen; # 203| const TranslationTableRule *save_transRule = *transRule; # 204| TranslationTableOpcode save_transOpcode = *transOpcode; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:202:2: warning[core.uninitialized.Assign]: Assigned value is garbage or undefined # 200| int *passIC, PassRuleMatch *match, TranslationTableRule **groupingRule, # 201| widechar *groupingOp) { # 202|-> int save_transCharslen = *transCharslen; # 203| const TranslationTableRule *save_transRule = *transRule; # 204| TranslationTableOpcode save_transOpcode = *transOpcode; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:358:3: warning[core.NonNullParamChecker]: Null pointer passed to 2nd parameter expecting 'nonnull' # 356| else # 357| typebuf_temp[k] = typebuf[posMapping[k]]; # 358|-> memcpy(typebuf, typebuf_temp, output->length * sizeof(formtype)); # 359| free(typebuf_temp); # 360| } Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:1242:4: warning[deadcode.DeadStores]: Value stored to 'goodTrans' is never read # 1240| if (srcSpacing != NULL) { # 1241| if (!(destSpacing = _lou_allocMem(alloc_destSpacing, 0, input.length, *outlen))) # 1242|-> goodTrans = 0; # 1243| else # 1244| memset(destSpacing, '*', *outlen); Error: COMPILER_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:1293:47: warning[-Wmaybe-uninitialized]: 'realInlen' may be used uninitialized # 1293 | passPosMapping[output.length] = realInlen; # | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~ liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:1270:21: note: 'realInlen' was declared here # 1270 | int realInlen; # | ^~~~~~~~~ # 1291| break; # 1292| } # 1293|-> passPosMapping[output.length] = realInlen; # 1294| if (passPosMapping == posMapping) { # 1295| passPosMapping = posMapping2; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:1295:19: warning[core.uninitialized.Assign]: Assigned value is garbage or undefined # 1293| passPosMapping[output.length] = realInlen; # 1294| if (passPosMapping == posMapping) { # 1295|-> passPosMapping = posMapping2; # 1296| } else { # 1297| int *prevPosMapping = posMapping3; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:1414:21: warning[core.NullDereference]: Array access (from variable 'inputPos') results in a null pointer dereference # 1412| int outpos; # 1413| for (outpos = 0; outpos < *outlen; outpos++) { # 1414|-> int new_inpos = inputPos[outpos]; # 1415| if (new_inpos < inpos) { # 1416| rv = 0; Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c: scope_hint: In function 'hyphenateWord' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:1448:21: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'prepWord' # 1446| /* prepWord is of the format ".hello." # 1447| * hyphens is the length of the word "hello" "00000" */ # 1448|-> prepWord[0] = '.'; # 1449| for (i = 0; i < wordSize; i++) { # 1450| prepWord[i + 1] = toLowercase(table, getChar(word[i], table)); Error: CPPCHECK_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:2312: warning[uninitvar]: Uninitialized variable: dots # 2310| } # 2311| # 2312|-> return for_updatePositions(dots, 1, length, 0, pos, input, output, posMapping, # 2313| cursorPosition, cursorStatus); # 2314| } Error: GCC_ANALYZER_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c: scope_hint: In function 'markSyllables' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:2500:17: warning[-Wanalyzer-use-of-uninitialized-value]: use of uninitialized value 'transOpcode' # 2498| tryThis++; # 2499| } # 2500|-> switch (transOpcode) { # 2501| case CTO_Always: # 2502| if (pos >= input->length) return 0; Error: COMPILER_WARNING (CWE-563): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c: scope_hint: In function 'resolveEmphasisPassages' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:2913:26: warning[-Wunused-but-set-variable]: variable 'last_word_start' set but not used # 2913 | int in_word = 0, last_word_start = -1, last_word_end = -1; # | ^~~~~~~~~~~~~~~ # 2911| unsigned int *wordBuffer) { # 2912| const TranslationTableOffset *emphRule = table->emphRules[class->rule]; # 2913|-> int in_word = 0, last_word_start = -1, last_word_end = -1; # 2914| int in_emph_word = 0, last_emph_symbol = -1; # 2915| int in_pass = 0, last_pass_word_start = -1, last_pass_word_end = -1, pass_start = -1; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:2925:4: warning[deadcode.DeadStores]: Value stored to 'last_word_start' is never read # 2923| if (!in_word && wordBuffer[i] & WORD_CHAR) { # 2924| in_word = 1; # 2925|-> last_word_start = i; # 2926| } else /* check if at end of word */ # 2927| if (in_word && !(wordBuffer[i] & WORD_CHAR)) { Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:3644:18: warning[core.UndefinedBinaryOperatorResult]: The left operand of '!=' is a garbage value # 3642| while (pos <= input->length) { /* the main translation loop */ # 3643| if (pos > 0 && checkCharAttr(input->chars[pos - 1], CTC_Space, table) && # 3644|-> (transOpcode != CTO_JoinableWord)) # 3645| lastWord = (LastWord){ pos, output->length, insertEmphasesFrom }; # 3646| if (pos == input->length) break; Error: COMPILER_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:3919:36: warning[-Wmaybe-uninitialized]: 'repwordStart' may be used uninitialized # 3919 | if (posMapping[k] >= repwordStart) { # | ^ liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c: scope_hint: In function '_lou_translate' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:3620:13: note: 'repwordStart' was declared here # 3620 | int repwordStart; # | ^~~~~~~~~~~~ # 3917| int k; # 3918| for (k = output->length - 1; k >= 0; k--) # 3919|-> if (posMapping[k] >= repwordStart) { # 3920| output->chars[k + dotslen] = output->chars[k]; # 3921| posMapping[k + dotslen] = posMapping[k]; Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c: scope_hint: In function 'lou_hyphenate' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:4072:54: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'textHyphens' # 4070| # 4071| // initialize hyphens array # 4072|-> for (k = 0; k < textLen; k++) textHyphens[k] = '0'; # 4073| textHyphens[k] = 0; # 4074| Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:4073:24: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'textHyphens' # 4071| // initialize hyphens array # 4072| for (k = 0; k < textLen; k++) textHyphens[k] = '0'; # 4073|-> textHyphens[k] = 0; # 4074| # 4075| // for every word part Error: COMPILER_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c: scope_hint: In function 'lou_hyphenate' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:4111:29: warning[-Wmaybe-uninitialized]: 'inputPos' may be used uninitialized # 4111 | int braillePos = inputPos[k]; # | ^~~~~~~~~~ liblouis-3.28.0-build/liblouis-3.28.0/liblouis/lou_translateString.c:4047:14: note: 'inputPos' was declared here # 4047 | int *inputPos; # | ^~~~~~~~ # 4109| int prevPos = -1; # 4110| for (k = 0; k < textLen; k++) { # 4111|-> int braillePos = inputPos[k]; # 4112| if (braillePos > inlen || braillePos < 0) break; # 4113| if (braillePos > prevPos) { Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c:108:57: warning[core.NullDereference]: Array access (from variable 'rule_string') results in a null pointer dereference # 106| int l = 0; # 107| if (rule->nocross) # 108|-> for (char *c = "nocross "; *c; c++) rule_string[l++] = *c; # 109| const char *opcode = _lou_findOpcodeName(rule->opcode); # 110| for (size_t k = 0; k < strlen(opcode); k++) rule_string[l++] = opcode[k]; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c:110:64: warning[core.NullDereference]: Array access (from variable 'rule_string') results in a null pointer dereference # 108| for (char *c = "nocross "; *c; c++) rule_string[l++] = *c; # 109| const char *opcode = _lou_findOpcodeName(rule->opcode); # 110|-> for (size_t k = 0; k < strlen(opcode); k++) rule_string[l++] = opcode[k]; # 111| rule_string[l++] = '\t'; # 112| for (int k = 0; k < rule->charslen; k++) rule_string[l++] = rule->charsdots[k]; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c:111:20: warning[core.NullDereference]: Array access (from variable 'rule_string') results in a null pointer dereference # 109| const char *opcode = _lou_findOpcodeName(rule->opcode); # 110| for (size_t k = 0; k < strlen(opcode); k++) rule_string[l++] = opcode[k]; # 111|-> rule_string[l++] = '\t'; # 112| for (int k = 0; k < rule->charslen; k++) rule_string[l++] = rule->charsdots[k]; # 113| rule_string[l++] = '\t'; Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c: scope_hint: In function 'printRule.part.0' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c:120:33: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL 'message' where non-null expected <built-in>: note: argument 1 of '__builtin_sprintf' must be non-null # 118| // if a dot pattern can not be displayed, print an error message # 119| char *message = (char *)malloc(50 * sizeof(char)); # 120|-> sprintf(message, "ERROR: provide a display rule for dots %s", # 121| _lou_showDots(&rule->charsdots[rule->charslen + k], 1)); # 122| l = 0; Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c: scope_hint: In function 'find_matching_rules' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c:179:9: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL 'data_save' where non-null expected <built-in>: note: argument 1 of '__builtin_memcpy' must be non-null # 177| /* save data */ # 178| data_save = (char *)malloc(text_len * sizeof(char)); # 179|-> memcpy(data_save, data, text_len); # 180| # 181| for (k = 0; k < text_len; k++) Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c: scope_hint: In function 'findRelevantRules' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/maketable.c:454:44: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'rules' # 452| for (k = 0; k < rule->charslen; k++) # 453| if (rule->charsdots[k] != text[n + k]) goto next_rule; # 454|-> rules[m++] = rule; # 455| if (m == rules_len) goto finish; # 456| next_rule: Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c: scope_hint: In function 'list_conj' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:59:28: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'list' # 57| if (!list) { # 58| list = malloc(sizeof(List)); # 59|-> list->head = dup ? dup(x) : x; # 60| list->free = free; # 61| list->tail = NULL; Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:65:25: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'l' # 63| } else if (!cmp) { # 64| List *l = malloc(sizeof(List)); # 65|-> l->head = dup ? dup(x) : x; # 66| l->free = free; # 67| l->tail = list; Error: GCC_ANALYZER_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:73:33: warning[-Wanalyzer-malloc-leak]: leak of 'strdup(*table.name)' # 71| List *l2 = NULL; # 72| while (l1) { # 73|-> int c = cmp(l1->head, x); # 74| if (c > 0) # 75| break; Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:73:33: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL '*l1.head' where non-null expected /usr/include/string.h:156:12: note: argument 1 of 'strcmp' must be non-null # 71| List *l2 = NULL; # 72| while (l1) { # 73|-> int c = cmp(l1->head, x); # 74| if (c > 0) # 75| break; Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:73:33: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL 'x' where non-null expected liblouis-3.28.0-build/liblouis-3.28.0/gnulib/string.h:41: included_from: Included from here. liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:27: included_from: Included from here. /usr/include/string.h:156:12: note: argument 2 of 'strcmp' must be non-null # 71| List *l2 = NULL; # 72| while (l1) { # 73|-> int c = cmp(l1->head, x); # 74| if (c > 0) # 75| break; Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:85:26: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'l3' # 83| } # 84| List *l3 = malloc(sizeof(List)); # 85|-> l3->head = dup ? dup(x) : x; # 86| l3->free = free; # 87| l3->tail = l1; Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c: scope_hint: In function 'list_toArray' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:144:51: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'array' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c: scope_hint: In function 'list_toArray' # 142| array = malloc((1 + list_size(list)) * sizeof(void *)); # 143| i = 0; # 144|-> for (l = list; l; l = l->tail) array[i++] = dup ? dup(l->head) : l->head; # 145| array[i] = NULL; # 146| return array; Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:145:18: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'array' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c: scope_hint: In function 'list_toArray' # 143| i = 0; # 144| for (l = list; l; l = l->tail) array[i++] = dup ? dup(l->head) : l->head; # 145|-> array[i] = NULL; # 146| return array; # 147| } Error: CPPCHECK_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:353: error[leakNoVarFunctionCall]: Allocation with malloc, memcpy doesn't release it. # 351| features = # 352| list_conj(list_conj(features, # 353|-> memcpy(malloc(sizeof(f1)), &f1, sizeof(f1)), # 354| NULL, NULL, (void (*)(void *))feature_free), # 355| memcpy(malloc(sizeof(f2)), &f2, sizeof(f2)), NULL, Error: CPPCHECK_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:355: error[leakNoVarFunctionCall]: Allocation with malloc, memcpy doesn't release it. # 353| memcpy(malloc(sizeof(f1)), &f1, sizeof(f1)), # 354| NULL, NULL, (void (*)(void *))feature_free), # 355|-> memcpy(malloc(sizeof(f2)), &f2, sizeof(f2)), NULL, # 356| NULL, (void (*)(void *))feature_free); # 357| } else { Error: CPPCHECK_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:362: error[leakNoVarFunctionCall]: Allocation with malloc, memcpy doesn't release it. # 360| f.feature.key, f.feature.val); # 361| features = # 362|-> list_conj(features, memcpy(malloc(sizeof(f)), &f, sizeof(f)), # 363| NULL, NULL, (void (*)(void *))feature_free); # 364| } Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c: scope_hint: In function 'widestrToStr' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:418:43: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'result' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c: scope_hint: In function 'widestrToStr' # 416| char *result = malloc((1 + n) * sizeof(char)); # 417| size_t k; # 418|-> for (k = 0; k < n; k++) result[k] = (char)str[k]; # 419| result[k] = '\0'; # 420| return result; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:551:11: warning[deadcode.DeadStores]: Although the value stored to 'features' is used in the enclosing expression, the value is never actually read from 'features' # 549| f2->feature.val); # 550| features = list_conj( # 551|-> features = list_conj(features, f1, NULL, NULL, # 552| (void (*)(void *))feature_free), # 553| f2, NULL, NULL, (void (*)(void *))feature_free); Error: CPPCHECK_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:619: error[leakNoVarFunctionCall]: Allocation with malloc, memcpy doesn't release it. # 617| if (features) { # 618| TableMeta m = { strdup(*table), features }; # 619|-> tableIndex = list_conj(tableIndex, memcpy(malloc(sizeof(m)), &m, sizeof(m)), # 620| NULL, NULL, free); # 621| } Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c: scope_hint: In function 'listFiles' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:687:28: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'dirName' # 685| ; # 686| dirName = malloc(n + 1); # 687|-> dirName[n] = '\0'; # 688| memcpy(dirName, &searchPath[pos], n); # 689| list = listDir(list, dirName); Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:688:17: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL 'dirName' where non-null expected <built-in>: note: argument 1 of '__builtin_memcpy' must be non-null # 686| dirName = malloc(n + 1); # 687| dirName[n] = '\0'; # 688|-> memcpy(dirName, &searchPath[pos], n); # 689| list = listDir(list, dirName); # 690| free(dirName); Error: CPPCHECK_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:767: error[leakNoVarFunctionCall]: Allocation with malloc, memcpy doesn't release it. # 765| if (quotient > 0) { # 766| TableMatch m = { strdup(table->name), quotient }; # 767|-> matches = list_conj(matches, memcpy(malloc(sizeof(m)), &m, sizeof(m)), # 768| (int (*)(void *, void *))cmpMatches, NULL, free); # 769| } Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:799:16: warning[unix.Malloc]: Potential leak of memory pointed to by 'value' # 797| if (lineNumber < 0 || lineNumber > f->lineNumber) { # 798| value = strdup(f->feature.val); # 799|-> lineNumber = f->lineNumber; # 800| } # 801| } else if (cmp > 0) { Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/metadata.c:817:10: warning[unix.Malloc]: Potential memory leak # 815| for (l = tableIndex; l; l = l->tail) { # 816| TableMeta *table = l->head; # 817|-> tables = list_conj( # 818| tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); # 819| } Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/pattern.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: COMPILER_WARNING (CWE-1164): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/pattern.c:313:1: warning[-Wunused-function]: 'pattern_output' defined but not used # 313 | pattern_output(const widechar *expr_data, const TranslationTableHeader *table) { # | ^~~~~~~~~~~~~~ # 311| # 312| static void # 313|-> pattern_output(const widechar *expr_data, const TranslationTableHeader *table) { # 314| printf("%d \tlength\n", expr_data[0]); # 315| printf("%d \tloops\n", expr_data[1]); Error: COMPILER_WARNING (CWE-1164): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/pattern.c:435:1: warning[-Wunused-function]: 'pattern_print' defined but not used # 435 | pattern_print(const widechar *expr_data, const TranslationTableHeader *table) { # | ^~~~~~~~~~~~~ # 433| # 434| static void # 435|-> pattern_print(const widechar *expr_data, const TranslationTableHeader *table) { # 436| if (expr_data[0] > 0 && expr_data[0] != PTN_END) # 437| pattern_print_expression(expr_data, 2, table); Error: COMPILER_WARNING (CWE-1164): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/pattern.c:923:1: warning[-Wunused-function]: 'pattern_insert_alternate' defined but not used # 923 | pattern_insert_alternate(const widechar *input, const int input_max, int *input_crs, # | ^~~~~~~~~~~~~~~~~~~~~~~~ # 921| # 922| static int # 923|-> pattern_insert_alternate(const widechar *input, const int input_max, int *input_crs, # 924| widechar *expr_data, const int expr_max, widechar *expr_crs, widechar *loop_cnts, # 925| int expr_insert, TranslationTableHeader *table, const FileInfo *nested) { Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/liblouis/pattern.c: scope_hint: In function 'pattern_check_hook' liblouis-3.28.0-build/liblouis-3.28.0/liblouis/pattern.c:1606:9: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL 'loop_cnts' where non-null expected <built-in>: note: argument 1 of '__builtin_memset' must be non-null # 1604| input_crs = input_start; # 1605| loop_cnts = malloc(expr_data[1] * sizeof(int)); # 1606|-> memset(loop_cnts, 0, expr_data[1] * sizeof(int)); # 1607| ret = pattern_check_expression(input, &input_crs, input_minmax, input_dir, expr_data, # 1608| hook, hook_data, hook_max, 2, 0, 0, loop_cnts, table); Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/liblouis/utils.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: COMPILER_WARNING (CWE-1164): liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c: scope_hint: At top level liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:61:1: warning[-Wunused-function]: 'print_int_array' defined but not used # 61 | print_int_array(const char *prefix, int *pos_list, int len) { # | ^~~~~~~~~~~~~~~ # 59| # 60| static void # 61|-> print_int_array(const char *prefix, int *pos_list, int len) { # 62| int i; # 63| fprintf(stderr, "%s ", prefix); Error: GCC_ANALYZER_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:103:24: warning[-Wanalyzer-malloc-leak]: leak of 'expectedbuf' # 101| if (in.direction < 0 || in.direction > 1) { # 102| fprintf(stderr, "Invalid direction.\n"); # 103|-> return 1; # 104| } # 105| if (in.direction != 0 && in.typeform != NULL) { Error: GCC_ANALYZER_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:103:24: warning[-Wanalyzer-malloc-leak]: leak of 'outbuf' # 101| if (in.direction < 0 || in.direction > 1) { # 102| fprintf(stderr, "Invalid direction.\n"); # 103|-> return 1; # 104| } # 105| if (in.direction != 0 && in.typeform != NULL) { Error: GCC_ANALYZER_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:103:24: warning[-Wanalyzer-malloc-leak]: leak of 'typeformbuf' # 101| if (in.direction < 0 || in.direction > 1) { # 102| fprintf(stderr, "Invalid direction.\n"); # 103|-> return 1; # 104| } # 105| if (in.direction != 0 && in.typeform != NULL) { Error: COMPILER_WARNING (CWE-704): liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c: scope_hint: In function 'check_base' liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:126:35: warning[-Wdiscarded-qualifiers]: passing argument 1 of 'parsed_strlen' discards 'const' qualifier from pointer target type # 126 | int inlen = parsed_strlen(input); # | ^~~~~ liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:50:21: note: expected 'char *' but argument is of type 'const char *' # 50 | parsed_strlen(char *s) { # | ~~~~~~^ # 124| } # 125| widechar *inbuf, *outbuf, *expectedbuf; # 126|-> int inlen = parsed_strlen(input); # 127| int actualInlen; # 128| const int outlen_multiplier = 4 + sizeof(widechar) * 2; Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:141:17: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL 'typeformbuf' where non-null expected <built-in>: note: argument 1 of '__builtin_memcpy' must be non-null # 139| if (in.typeform != NULL) { # 140| typeformbuf = malloc(outlen * sizeof(formtype)); # 141|-> memcpy(typeformbuf, in.typeform, inlen * sizeof(formtype)); # 142| } # 143| if (in.cursorPos >= 0) { Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:156:3: warning[unix.Malloc]: Potential leak of memory pointed to by 'expectedbuf' # 154| } # 155| if (in.real_inlen > inlen) { # 156|-> fprintf(stderr, # 157| "expected realInputLength (%d) may not exceed total input length " # 158| "(%d)\n", Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:156:3: warning[unix.Malloc]: Potential leak of memory pointed to by 'outbuf' # 154| } # 155| if (in.real_inlen > inlen) { # 156|-> fprintf(stderr, # 157| "expected realInputLength (%d) may not exceed total input length " # 158| "(%d)\n", Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:156:3: warning[unix.Malloc]: Potential leak of memory pointed to by 'typeformbuf' # 154| } # 155| if (in.real_inlen > inlen) { # 156|-> fprintf(stderr, # 157| "expected realInputLength (%d) may not exceed total input length " # 158| "(%d)\n", Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c: scope_hint: In function 'convert_typeform' liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:342:47: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'typeform' # 340| formtype *typeform = malloc(len * sizeof(formtype)); # 341| int i; # 342|-> for (i = 0; i < len; i++) typeform[i] = typeform_string[i] - '0'; # 343| return typeform; # 344| } Error: COMPILER_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c: scope_hint: In function 'check_display' liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:438:18: warning[-Walloc-size-larger-than=]: argument 1 range [18446744065119617024, 18446744073709551612] exceeds maximum object size 9223372036854775807 # 438 | outbuf = malloc(sizeof(widechar) * inlen); # | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:25: included_from: Included from here. liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/stdlib.h:1044:1: note: in a call to allocation function 'malloc' declared here # 1044 | _GL_FUNCDECL_SYS (malloc, void *, # | ^~~~~~~~~~~~~~~~ # 436| } # 437| } # 438|-> outbuf = malloc(sizeof(widechar) * inlen); # 439| if (!lou_charToDots(displayTableList, inbuf, outbuf, inlen, ucBrl)) { # 440| // This should only happen if the table can not be compiled. Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c: scope_hint: In function 'check_hyphenation' liblouis-3.28.0-build/liblouis-3.28.0/tools/brl_checks.c:565:28: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL 'hyphenatedbuf' # 563| int i = 0; # 564| int j = 0; # 565|-> hyphenatedbuf[i++] = inbuf[j++]; # 566| for (; j < inlen; j++) { # 567| if (hyphens[j] == '2') Error: CPPCHECK_WARNING (CWE-562): liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/gettext.h:247: error[returnDanglingLifetime]: Returning pointer to local variable 'msg_ctxt_id' that will be invalid when returning. # 245| #endif # 246| if (found_translation) # 247|-> return translation; # 248| } # 249| return msgid; Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/unistr/u16-to-u8.c:29: included_from: Included from here. liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/unistr.h:320:12: warning[core.NullDereference]: Array access (from variable 's') results in a null pointer dereference # 318| if (uc < 0x80 && n > 0) # 319| { # 320|-> s[0] = uc; # 321| return 1; # 322| } Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/unistr/u16-to-u8.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/unistr/u16-to-u8.c:109:13: warning[core.NonNullParamChecker]: Null pointer passed to 2nd parameter expecting 'nonnull' # 107| } # 108| if (result == resultbuf && length > 0) # 109|-> memcpy ((char *) memory, (char *) result, # 110| length * sizeof (DST_UNIT)); # 111| result = memory; Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/unistr/u32-to-u8.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/unistr/u32-to-u8.c:95:13: warning[core.NonNullParamChecker]: Null pointer passed to 2nd parameter expecting 'nonnull' # 93| } # 94| if (result == resultbuf && length > 0) # 95|-> memcpy ((char *) memory, (char *) result, # 96| length * sizeof (DST_UNIT)); # 97| result = memory; Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_allround.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkhyphens.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checktable.c:114:8: warning[deadcode.DeadStores]: Although the value stored to 'table' is used in the enclosing expression, the value is never actually read from 'table' # 112| } # 113| # 114|-> if (!(table = lou_getTable(argv[optind]))) { # 115| lou_free(); # 116| exit(EXIT_FAILURE); Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_table_query’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:140:28: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘query_as_string’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:22: included_from: Included from here. # 138| char *query_as_string = malloc(sizeof(char) * MAXSTRING); # 139| char *p = query_as_string; # 140|-> query_as_string[0] = '\0'; # 141| while (1) { # 142| if (!yaml_parser_parse(parser, &event)) yaml_error(YAML_SCALAR_EVENT, &event); Error: GCC_ANALYZER_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:152:56: warning[-Wanalyzer-malloc-leak]: leak of ‘table_file_name_check’ # 150| (event.type != YAML_SCALAR_EVENT)) # 151| yaml_error(YAML_SCALAR_EVENT, &event); # 152|-> *table_file_name_check = strdup((const char *)event.data.scalar.value); # 153| yaml_event_delete(&event); # 154| } else { Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_table_value’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:210:23: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘table_name’ # 208| char *table_content = NULL; # 209| yaml_event_t event; # 210|-> table_name[0] = '\0'; # 211| if (!yaml_parser_parse(parser, &event) || # 212| !(event.type == YAML_SEQUENCE_START_EVENT || Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:265:13: warning[core.NullDereference]: Dereference of null pointer (loaded from variable 'table_file_name') # 263| do { # 264| table_file_name++; # 265|-> } while (*table_file_name); # 266| while (table_file_name >= table_name && *table_file_name != '/' && # 267| *table_file_name != '\\') Error: COMPILER_WARNING (CWE-704): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_table_value’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:274:30: warning[-Wdiscarded-qualifiers]: passing argument 1 of ‘free’ discards ‘const’ qualifier from pointer target type liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/stdlib.h:36: included_from: Included from here. liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:25: included_from: Included from here. /usr/include/stdlib.h:687:25: note: expected ‘void *’ but argument is of type ‘const char *’ # 272| "'%s'", # 273| table_file_name_check, table_file_name + 1); # 274|-> free(table_file_name_check); # 275| } # 276| } Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:278:21: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘table’ # 276| } # 277| table = malloc(sizeof(table_value)); # 278|-> table->name = table_name; # 279| table->content = table_content; # 280| table->location = start_line + 1; Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_inPos’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:516:26: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘pos’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_inPos’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_inPos’ # 514| "Too many input positions for translation of length %d.", translen); # 515| # 516|-> pos[i++] = parse_number((const char *)event.data.scalar.value, "input position", # 517| event.start_mark.line + 1); # 518| yaml_event_delete(&event); Error: GCC_ANALYZER_WARNING (CWE-476): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_outPos’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:548:26: warning[-Wanalyzer-possible-null-dereference]: dereference of possibly-NULL ‘pos’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_outPos’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_outPos’ # 546| "Too many output positions for input string of length %d.", translen); # 547| # 548|-> pos[i++] = parse_number((const char *)event.data.scalar.value, "output position", # 549| event.start_mark.line + 1); # 550| yaml_event_delete(&event); Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_options’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:698:22: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL ‘option_name’ where non-null expected liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_options’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘read_options’ liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/string.h:41: included_from: Included from here. liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:27: included_from: Included from here. /usr/include/string.h:156:12: note: argument 1 of ‘strcmp’ must be non-null # 696| strndup((const char *)event.data.scalar.value, event.data.scalar.length); # 697| # 698|-> if (!strcmp(option_name, "xfail")) { # 699| yaml_event_delete(&event); # 700| *xfail = read_xfail(parser); Error: GCC_ANALYZER_WARNING (CWE-775): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c: scope_hint: In function ‘main’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:1028:26: warning[-Wanalyzer-file-leak]: leak of FILE ‘fopen(argv[1], "rb")’ # 1026| } # 1027| # 1028|-> char *dir_name = strdup(file_name); # 1029| int i = strlen(dir_name); # 1030| while (i > 0) { Error: GCC_ANALYZER_WARNING (CWE-401): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:1028:26: warning[-Wanalyzer-malloc-leak]: leak of ‘fopen(argv[1], "rb")’ # 1026| } # 1027| # 1028|-> char *dir_name = strdup(file_name); # 1029| int i = strlen(dir_name); # 1030| while (i > 0) { Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_checkyaml.c:1029:17: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL ‘dir_name’ where non-null expected <built-in>: note: argument 1 of ‘__builtin_strlen’ must be non-null # 1027| # 1028| char *dir_name = strdup(file_name); # 1029|-> int i = strlen(dir_name); # 1030| while (i > 0) { # 1031| if (dir_name[i - 1] == '/' || dir_name[i - 1] == '\\') { Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_debug.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: COMPILER_WARNING (CWE-681): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_debug.c: scope_hint: In function ‘print_chars’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_debug.c:104:16: warning[-Wpointer-sign]: pointer targets in returning ‘uint8_t *’ {aka ‘unsigned char *’} from a function with return type ‘char *’ differ in signedness # 104 | return result_buf; # | ^~~~~~~~~~ # 102| #endif # 103| result_buf[result_len] = 0; # 104|-> return result_buf; # 105| } # 106| Error: COMPILER_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_debug.c: scope_hint: In function ‘printRule’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_debug.c:111:47: warning[-Wformat=]: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘TranslationTableCharacterAttributes’ {aka ‘long long unsigned int’} # 111 | if (thisRule->before) printf("before=%x, ", thisRule->before); # | ~^ ~~~~~~~~~~~~~~~~ # | | | # | unsigned int TranslationTableCharacterAttributes {aka long long unsigned int} # | %llx # 109| printf("Rule: "); # 110| printf("opcode=%s, ", _lou_findOpcodeName(thisRule->opcode)); # 111|-> if (thisRule->before) printf("before=%x, ", thisRule->before); # 112| if (thisRule->after) printf("after=%x, ", thisRule->after); # 113| switch (thisRule->opcode) { Error: COMPILER_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_debug.c:112:45: warning[-Wformat=]: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘TranslationTableCharacterAttributes’ {aka ‘long long unsigned int’} # 112 | if (thisRule->after) printf("after=%x, ", thisRule->after); # | ~^ ~~~~~~~~~~~~~~~ # | | | # | unsigned int TranslationTableCharacterAttributes {aka long long unsigned int} # | %llx # 110| printf("opcode=%s, ", _lou_findOpcodeName(thisRule->opcode)); # 111| if (thisRule->before) printf("before=%x, ", thisRule->before); # 112|-> if (thisRule->after) printf("after=%x, ", thisRule->after); # 113| switch (thisRule->opcode) { # 114| case CTO_Context: Error: COMPILER_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_debug.c: scope_hint: In function ‘show_brailleIndicators’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_debug.c:324:57: warning[-Wformat=]: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘EmphasisClass’ # 324 | snprintf(name, BUFSIZE, "lenemphphrase %s", table->emphClasses[i]); # | ~^ ~~~~~~~~~~~~~~~~~~~~~ # | | | # | char * EmphasisClass # 322| print_brailleIndicator(table->emphRules[i][offset], name); # 323| } # 324|-> snprintf(name, BUFSIZE, "lenemphphrase %s", table->emphClasses[i]); # 325| print_phraseLength(table->emphRules[i][lenPhraseOffset], name); # 326| } Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_trace.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: COMPILER_WARNING (CWE-681): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_trace.c: scope_hint: In function ‘print_chars’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_trace.c:97:16: warning[-Wpointer-sign]: pointer targets in returning ‘uint8_t *’ {aka ‘unsigned char *’} from a function with return type ‘char *’ differ in signedness # 97 | return result_buf; # | ^~~~~~~~~~ # 95| #endif # 96| result_buf[result_len] = 0; # 97|-> return result_buf; # 98| } # 99| Error: CLANG_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_trace.c:288:39: warning[unix.MallocSizeof]: Result of 'malloc' is converted to a pointer of type 'const TranslationTableRule *', which is incompatible with sizeof operand type 'TranslationTableRule' # 286| const TranslationTableHeader *translationTable; # 287| const DisplayTableHeader *displayTable; # 288|-> const TranslationTableRule **rules = malloc(512 * sizeof(TranslationTableRule)); # 289| int ruleslen; # 290| int i, j; Error: CPPCHECK_WARNING: liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_translate.c: information[normalCheckLevelMaxBranches]: Limiting analysis of branches. Use --check-level=exhaustive to analyze all branches. Error: CPPCHECK_WARNING (CWE-456): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_translate.c:227: error[uninitdata]: Memory is allocated but not initialized: tableOption # 225| for (int i = optind; i < argc; i++) { # 226| if (i > optind) strcat(tableOption, " "); # 227|-> strcat(tableOption, argv[i]); # 228| } # 229| } Error: GCC_ANALYZER_WARNING (CWE-688): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_translate.c:227:25: warning[-Wanalyzer-possible-null-argument]: use of possibly-NULL ‘tableOption’ where non-null expected <built-in>: note: argument 1 of ‘__builtin_strcat’ must be non-null # 225| for (int i = optind; i < argc; i++) { # 226| if (i > optind) strcat(tableOption, " "); # 227|-> strcat(tableOption, argv[i]); # 228| } # 229| } Error: GCC_ANALYZER_WARNING (CWE-457): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_translate.c: scope_hint: In function ‘main’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_translate.c:227:25: warning[-Wanalyzer-use-of-uninitialized-value]: use of uninitialized value ‘*tableOption’ liblouis-3.28.0-build/liblouis-3.28.0/tools/gnulib/string.h:41: included_from: Included from here. liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_translate.c:26: included_from: Included from here. /usr/include/string.h:149:14: note: argument 1 of ‘strcat’ must be a pointer to a null-terminated string # 225| for (int i = optind; i < argc; i++) { # 226| if (i > optind) strcat(tableOption, " "); # 227|-> strcat(tableOption, argv[i]); # 228| } # 229| } Error: COMPILER_WARNING (CWE-1164): liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_translate.c: scope_hint: In function ‘main’ liblouis-3.28.0-build/liblouis-3.28.0/tools/lou_translate.c:275:1: warning[-Wunused-label]: label ‘success’ defined but not used # 275 | success: # | ^~~~~~~ # 273| translate_input(!backward_flag, table, mode, stdin); # 274| # 275|-> success: # 276| exitValue = EXIT_SUCCESS; # 277| failure: