configure: WARNING: Missing program 'makeinfo', Documentation will not be built. Please install you you want documentation or refer to online resources. compileTranslationTable.c: In function ‘getToken’: compileTranslationTable.c:377:36: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 377 | if (result->length >= maxlen) { | ^~ compileTranslationTable.c: In function ‘passFindCharacters’: compileTranslationTable.c:744:62: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 744 | instructions[IC - 1] <= lookback) { | ^~ compileTranslationTable.c: In function ‘addCharacterClass’: compileTranslationTable.c:1135:63: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare] 1135 | if (strlen(reservedAttributeNames[k]) == length) { | ^~ compileTranslationTable.c:1138:74: warning: comparison of integer expressions of different signedness: ‘char’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1138 | if (reservedAttributeNames[k][i] != name[i]) break; | ^~ compileTranslationTable.c: In function ‘getOpcode’: compileTranslationTable.c:1204:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘short int’ [-Wsign-compare] 1204 | if (token->length == opcodeLengths[opcode]) | ^~ compileTranslationTable.c:1199:27: warning: unused parameter ‘file’ [-Wunused-parameter] 1199 | getOpcode(const FileInfo *file, const CharsString *token) { | ~~~~~~~~~~~~~~~~^~~~ compileTranslationTable.c: In function ‘parseChars’: compileTranslationTable.c:1280:19: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1280 | while (in < token->length) { | ^ compileTranslationTable.c:1366:55: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1366 | if (in >= MAXSTRING - 1 || in >= token->length) break; | ^~ compileTranslationTable.c: In function ‘_lou_extParseChars’: compileTranslationTable.c:1406:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1406 | for (k = 0; k < result.length; k++) outString[k] = result.chars[k]; | ^ compileTranslationTable.c: In function ‘parseDots’: compileTranslationTable.c:1418:31: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1418 | for (index = 0; index < token->length; index++) { | ^ compileTranslationTable.c: In function ‘_lou_extParseDots’: compileTranslationTable.c:1525:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1525 | for (k = 0; k < result.length; k++) outString[k] = result.chars[k]; | ^ compileTranslationTable.c: In function ‘addRuleName’: compileTranslationTable.c:1591:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1591 | for (k = 0; k < name->length; k++) { | ^ compileTranslationTable.c: In function ‘compileSwapDots’: compileTranslationTable.c:1626:18: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1626 | while (k <= source->length) { | ^~ compileTranslationTable.c:1627:50: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1627 | if (source->chars[k] != ',' && k != source->length) | ^~ compileTranslationTable.c:1632:41: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1632 | for (kk = 0; kk < dotsDest.length; kk++) | ^ compileTranslationTable.c: In function ‘passGetDots’: compileTranslationTable.c:1750:29: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1750 | while (*passLinepos < passLine->length && | ^ compileTranslationTable.c: In function ‘passGetString’: compileTranslationTable.c:1766:35: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1766 | if ((*passLinepos >= passLine->length) || !passLine->chars[*passLinepos]) { | ^~ compileTranslationTable.c: In function ‘passGetNumber’: compileTranslationTable.c:1786:30: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1786 | while ((*passLinepos < passLine->length) && (passLine->chars[*passLinepos] >= '0') && | ^ compileTranslationTable.c: In function ‘passGetVariableNumber’: compileTranslationTable.c:1799:22: warning: comparison of unsigned expression in ‘>= 0’ is always true [-Wtype-limits] 1799 | if ((*number >= 0) && (*number < NUMVAR)) return 1; | ^~ compileTranslationTable.c: In function ‘passGetName’: compileTranslationTable.c:1816:31: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1816 | } while (*passLinepos < passLine->length); | ^ compileTranslationTable.c: In function ‘compilePassOpcode’: compileTranslationTable.c:1875:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1875 | for (k = 0; k < passHoldString.length && passHoldString.chars[k] > 32; k++) | ^ compileTranslationTable.c:1877:15: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1877 | if (k < passHoldString.length) | ^ compileTranslationTable.c:1885:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1885 | for (k = 0; k < passLine.length && passLine.chars[k] != SEPCHAR; k++) | ^ compileTranslationTable.c:1955:41: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1955 | for (kk = 0; kk < passHoldString.length; kk++) { | ^ compileTranslationTable.c:2150:28: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2150 | while (passLinepos < passLine.length && passLine.chars[passLinepos] <= 32) | ^ compileTranslationTable.c:2152:28: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2152 | while (passLinepos < passLine.length && passLine.chars[passLinepos] > 32) { | ^ compileTranslationTable.c:2188:41: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2188 | for (kk = 0; kk < passHoldString.length; kk++) { | ^ compileTranslationTable.c: In function ‘compileGrouping’: compileTranslationTable.c:2354:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2354 | for (k = 0; k < groupDots.length && groupDots.chars[k] != ','; k++) | ^ compileTranslationTable.c:2356:15: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2356 | if (k == groupDots.length) { | ^~ compileTranslationTable.c: In function ‘hyphenStringHash’: compileTranslationTable.c:2430:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2430 | for (k = 0; k < s->length; k++) { | ^ compileTranslationTable.c: In function ‘hyphenHashInsert’: compileTranslationTable.c:2472:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2472 | for (j = 0; j < key->length; j++) e->key->chars[j] = key->chars[j]; | ^ compileTranslationTable.c: In function ‘hyphenHashLookup’: compileTranslationTable.c:2486:31: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2486 | for (j = 0; j < key->length; j++) | ^ compileTranslationTable.c:2488:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2488 | if (j == key->length) return e->val; | ^~ compileTranslationTable.c: In function ‘compileHyphenation’: compileTranslationTable.c:2563:31: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2563 | for (i = 0; i < hyph.length; i++) { | ^ compileTranslationTable.c:2603:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2603 | for (j = 1; j <= e->key->length; j++) { | ^~ compileTranslationTable.c:2605:47: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2605 | for (k = j; k < e->key->length; k++) | ^ compileTranslationTable.c: In function ‘compileMacro’: compileTranslationTable.c:2783:27: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2783 | for (int i = 0; i < token.length; i++) { | ^ compileTranslationTable.c:2795:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 2795 | for (name_length = 0; name_length < token.length; | ^ compileTranslationTable.c: In function ‘compileRule’: compileTranslationTable.c:2886:30: warning: unused variable ‘macro’ [-Wunused-variable] 2886 | const Macro *macro; | ^~~~~ compileTranslationTable.c:3024:75: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3024 | for (int j = 0; j < arg.length; j++) | ^ compileTranslationTable.c:3403:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3403 | for (k = 0; k < emphClass.length; k++) s[k] = (char)emphClass.chars[k]; | ^ compileTranslationTable.c:3491:31: warning: declaration of ‘s’ shadows a previous local [-Wshadow] 3491 | char *s = malloc(sizeof(char) * (emphClass.length + 1)); | ^ compileTranslationTable.c:3402:31: note: shadowed declaration is here 3402 | char *s = malloc(sizeof(char) * (emphClass.length + 1)); | ^ compileTranslationTable.c:3492:29: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3492 | int k, i; | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3492:32: warning: declaration of ‘i’ shadows a previous local [-Wshadow] 3492 | int k, i; | ^ compileTranslationTable.c:3401:32: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3493:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3493 | for (k = 0; k < emphClass.length; k++) s[k] = (char)emphClass.chars[k]; | ^ compileTranslationTable.c:3648:42: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3648 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3492:29: note: shadowed declaration is here 3492 | int k, i; | ^ compileTranslationTable.c:3648:51: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3648 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3669:42: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3669 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3492:29: note: shadowed declaration is here 3492 | int k, i; | ^ compileTranslationTable.c:3669:51: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3669 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3700:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3700 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3700:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3700 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3710:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3710 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3710:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3710 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3719:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3719 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3719:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3719 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3744:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3744 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3744:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3744 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3758:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3758 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3758:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3758 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3771:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3771 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3771:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3771 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3793:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3793 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3793:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3793 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3806:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3806 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3806:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3806 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3818:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3818 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3818:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3818 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3834:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3834 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3834:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3834 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3845:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3845 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3845:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3845 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3853:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3853 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3853:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3853 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3918:42: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3918 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3918:51: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3918 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3944:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3944 | for (int k = 0; k < len - 1; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3953:67: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3953 | for (int l = 0; l < ruleChars.length; l++) { | ^ compileTranslationTable.c:3967:75: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3967 | for (int l = 0; l < y.length; l++) | ^ compileTranslationTable.c:3998:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3998 | for (int k = 1; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:3998:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 3998 | for (int k = 1; k < ruleChars.length; k++) | ^ compileTranslationTable.c:4027:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 4027 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:4027:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 4027 | for (int k = 0; k < ruleChars.length; k++) | ^ compileTranslationTable.c:4029:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 4029 | for (int k = 0; k < ruleDots.length; k++) | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:4029:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 4029 | for (int k = 0; k < ruleDots.length; k++) | ^ compileTranslationTable.c:4060:34: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 4060 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:3401:29: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:4060:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 4060 | for (int k = 0; k < ruleChars.length; k++) { | ^ compileTranslationTable.c:4170:34: warning: declaration of ‘i’ shadows a previous local [-Wshadow] 4170 | for (int i = 0; i < characters.length; i++) { | ^ compileTranslationTable.c:3401:32: note: shadowed declaration is here 3401 | int k, i; | ^ compileTranslationTable.c:4170:43: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 4170 | for (int i = 0; i < characters.length; i++) { | ^ compileTranslationTable.c:4186:76: warning: declaration of ‘dots’ shadows a previous local [-Wshadow] 4186 | TranslationTableCharacter *dots = | ^~~~ compileTranslationTable.c:3941:37: note: shadowed declaration is here 3941 | CharsString dots; | ^~~~ compileTranslationTable.c: In function ‘resolveSubtable’: compileTranslationTable.c:4580:44: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 4580 | if (dir == cp) dir = "."; | ^ compileTranslationTable.c: In function ‘includeFile’: compileTranslationTable.c:4828:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 4828 | for (k = 0; k < includedFile->length; k++) | ^ compileTranslationTable.c: In function ‘parseChars’: compileTranslationTable.c:1315:41: warning: this statement may fall through [-Wimplicit-fallthrough=] 1315 | compileWarning(file, "\\Xhhhh (with a capital 'X') is deprecated."); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compileTranslationTable.c:1316:33: note: here 1316 | case 'x': | ^~~~ compileTranslationTable.c:1323:41: warning: this statement may fall through [-Wimplicit-fallthrough=] 1323 | compileWarning(file, "\\Yhhhhh (with a capital 'Y') is deprecated."); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compileTranslationTable.c:1324:33: note: here 1324 | case 'y': | ^~~~ compileTranslationTable.c:1337:41: warning: this statement may fall through [-Wimplicit-fallthrough=] 1337 | compileWarning( | ^~~~~~~~~~~~~~~ 1338 | file, "\\Zhhhhhhhh (with a capital 'Z') is deprecated."); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compileTranslationTable.c:1339:33: note: here 1339 | case 'z': | ^~~~ compileTranslationTable.c: In function ‘compileRule’: compileTranslationTable.c:3891:45: warning: this statement may fall through [-Wimplicit-fallthrough=] 3891 | (*table)->syllables = 1; | ~~~~~~~~~~~~~~~~~~~~^~~ compileTranslationTable.c:3892:17: note: here 3892 | case CTO_Always: | ^~~~ compileTranslationTable.c:4043:28: warning: this statement may fall through [-Wimplicit-fallthrough=] 4043 | if ((*table)->numPasses < 4) (*table)->numPasses = 4; | ^ compileTranslationTable.c:4044:17: note: here 4044 | doPass: | ^~~~~~ compileTranslationTable.c:4094:25: warning: this statement may fall through [-Wimplicit-fallthrough=] 4094 | compileWarning(file, "class is deprecated, use attribute instead"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compileTranslationTable.c:4095:17: note: here 4095 | case CTO_Attribute: { | ^~~~ compileTranslationTable.c: In function ‘passFindCharacters’: compileTranslationTable.c:751:28: warning: this statement may fall through [-Wimplicit-fallthrough=] 751 | IC += 2; | ~~~^~~~ compileTranslationTable.c:754:17: note: here 754 | case pass_groupstart: | ^~~~ compileTranslationTable.c: At top level: compileTranslationTable.c:2770:1: warning: ‘compileMacro’ defined but not used [-Wunused-function] 2770 | compileMacro(FileInfo *file, const Macro **macro) { | ^~~~~~~~~~~~ compileTranslationTable.c:2734:1: warning: ‘cons_macro’ defined but not used [-Wunused-function] 2734 | cons_macro(const Macro *head, const MacroList *tail) { | ^~~~~~~~~~ compileTranslationTable.c: In function ‘allocateSpaceInTranslationTable’: compileTranslationTable.c:450:37: warning: dereference of NULL ‘newTable’ [CWE-476] [-Wanalyzer-null-dereference] 450 | newTable->tableSize = newTableSize; | ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~ ‘putChar.part.0’: events 1-2 | | 565 | putChar(const FileInfo *file, widechar c, TranslationTableHeader **table, | | ^~~~~~~ | | | | | (1) entry to ‘putChar.part.0’ |...... | 572 | if (!allocateSpaceInTranslationTable(file, &offset, sizeof(*character), table)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling ‘allocateSpaceInTranslationTable’ from ‘putChar.part.0’ | +--> ‘allocateSpaceInTranslationTable’: events 3-10 | | 428 | allocateSpaceInTranslationTable(const FileInfo *file, TranslationTableOffset *offset, | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (3) entry to ‘allocateSpaceInTranslationTable’ |...... | 434 | if (newTableSize > tableSize) { | | ~ | | | | | (4) following ‘true’ branch (when ‘newTableSize > tableSize’)... | 435 | TranslationTableHeader *newTable; | 436 | newTableSize += (newTableSize / OFFSETSIZE); | | ~~ | | | | | (5) ...to here | 437 | newTable = realloc(*table, newTableSize); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) when ‘realloc’ fails | 438 | if (!newTable) { | | ~ | | | | | (7) following ‘true’ branch (when ‘newTable’ is NULL)... | 439 | compileError(file, "Not enough memory for translation table."); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (8) ...to here |...... | 450 | newTable->tableSize = newTableSize; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (10) dereference of NULL ‘newTable’ | 451 | *table = newTable; | | ~~~~~~~~~~~~~~~~~ | | | | | (9) ‘newTable’ is NULL | compileTranslationTable.c: In function ‘_lou_defaultTableResolver’: compileTranslationTable.c:4585:51: warning: ‘__builtin___sprintf_chk’ may write a terminating nul past the end of the destination [-Wformat-overflow=] 4585 | sprintf(tableFile, "%s%c%s", dir, DIR_SEP, table); | ^ In file included from /usr/include/stdio.h:894, from compileTranslationTable.c:34: In function ‘sprintf’, inlined from ‘resolveSubtable’ at compileTranslationTable.c:4585:4, inlined from ‘_lou_defaultTableResolver’ at compileTranslationTable.c:4688:27: /usr/include/bits/stdio2.h:38:10: note: ‘__builtin___sprintf_chk’ output 2 or more bytes (assuming 4097) into a destination of size 4096 38 | return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 39 | __glibc_objsize (__s), __fmt, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 40 | __va_arg_pack ()); | ~~~~~~~~~~~~~~~~~ compileTranslationTable.c: In function ‘getTable’: compileTranslationTable.c:5079:84: warning: ‘translationTableListLen’ may be used uninitialized [-Wmaybe-uninitialized] 5079 | sizeof(TranslationTableChainEntry) + translationTableListLen; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ compileTranslationTable.c:5018:13: note: ‘translationTableListLen’ was declared here 5018 | int translationTableListLen, displayTableListLen = 0; | ^~~~~~~~~~~~~~~~~~~~~~~ lou_translateString.c:66:1: warning: function declaration isn’t a prototype [-Wstrict-prototypes] 66 | initStringBufferPool() { | ^~~~~~~~~~~~~~~~~~~~ lou_translateString.c: In function ‘initStringBufferPool’: lou_translateString.c:66:1: warning: old-style function definition [-Wold-style-definition] lou_translateString.c: In function ‘matchCurrentInput’: lou_translateString.c:375:29: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 375 | ((k < passIC + 2 + passInstructions[passIC + 1]) && (kk < input->length)); | ^ lou_translateString.c: In function ‘swapTest’: lou_translateString.c:391:25: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 391 | while (p - *pos < passInstructions[swapIC + 3]) { | ^ lou_translateString.c:410:25: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 410 | while (p - *pos < passInstructions[swapIC + 4]) { | ^ lou_translateString.c: In function ‘doPassSearch’: lou_translateString.c:626:51: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 626 | k < *searchIC + 2 + passInstructions[*searchIC + 1]; k++) | ^ lou_translateString.c:649:47: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 649 | for (k = 0; k < passInstructions[*searchIC + 5]; k++) { | ^ lou_translateString.c:665:59: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 665 | k < passInstructions[*searchIC + 6]; k++) { | ^ lou_translateString.c: In function ‘passDoTest’: lou_translateString.c:800:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 800 | for (k = 0; k < (*passInstructions)[*passIC + 5]; k++) { | ^ lou_translateString.c:825:51: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 825 | k < (*passInstructions)[*passIC + 6] && pos < input->length; | ^ lou_translateString.c: In function ‘passDoAction’: lou_translateString.c:951:77: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 951 | if ((output->length + passInstructions[passIC + 1]) > output->maxlength) | ^ lou_translateString.c:953:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 953 | for (k = 0; k < passInstructions[passIC + 1]; ++k) | ^ lou_translateString.c: In function ‘hyphenateWord’: lou_translateString.c:1468:47: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1468 | for (k = 0; k < currentState->numTrans; k++) { | ^ lou_translateString.c: In function ‘undefinedCharacter’: lou_translateString.c:2293:9: warning: ISO C90 forbids variable length array ‘dots’ [-Wvla] 2293 | widechar dots[length == 0 ? 1 : length]; | ^~~~~~~~ lou_translateString.c: In function ‘resolveEmphasisAllSymbols’: lou_translateString.c:3000:64: warning: unused parameter ‘typebuf’ [-Wunused-parameter] 3000 | const TranslationTableHeader *table, formtype *typebuf, const InString *input, | ~~~~~~~~~~^~~~~~~ lou_translateString.c: In function ‘translateString’: lou_translateString.c:3836:37: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3836 | int k; | ^ lou_translateString.c:3602:13: note: shadowed declaration is here 3602 | int k; | ^ lou_translateString.c:3895:29: warning: declaration of ‘k’ shadows a previous local [-Wshadow] 3895 | int k; | ^ lou_translateString.c:3602:13: note: shadowed declaration is here 3602 | int k; | ^ lou_translateString.c: In function ‘lou_dotsToChar’: lou_translateString.c:4104:91: warning: unused parameter ‘mode’ [-Wunused-parameter] 4104 | const char *tableList, widechar *inbuf, widechar *outbuf, int length, int mode) { | ~~~~^~~~ lou_translateString.c: In function ‘passDoTest’: lou_translateString.c:875:29: warning: this statement may fall through [-Wimplicit-fallthrough=] 875 | pos = searchPos; | ~~~~^~~~~~~~~~~ lou_translateString.c:876:17: note: here 876 | case pass_endTest: | ^~~~ lou_translateString.c: In function ‘translateString’: lou_translateString.c:3887:38: warning: this statement may fall through [-Wimplicit-fallthrough=] 3887 | case CTO_RepEndWord: { | ^ lou_translateString.c:3908:17: note: here 3908 | case CTO_RepWord: { | ^~~~ lou_translateString.c: In function ‘for_selectRule’: lou_translateString.c:2060:70: warning: this statement may fall through [-Wimplicit-fallthrough=] 2060 | *transOpcode = CTO_Always; | ~~~~~~~~~~~~~^~~~~~~~~~~~ lou_translateString.c:2061:49: note: here 2061 | case CTO_Always: | ^~~~ lou_translateString.c:2091:60: warning: this statement may fall through [-Wimplicit-fallthrough=] 2091 | if (checkEmphasisChange(pos, *transCharslen, emphasisBuffer)) | ^ lou_translateString.c:2093:49: note: here 2093 | case CTO_Contraction: | ^~~~ lou_translateString.c: In function ‘hyphenateWord’: lou_translateString.c:1446:21: warning: dereference of possibly-NULL ‘prepWord’ [CWE-690] [-Wanalyzer-possible-null-dereference] 1446 | prepWord[0] = '.'; | ~~~~~~~~~~~~^~~~~ ‘lou_hyphenate’: events 1-2 | | 4019 | lou_hyphenate(const char *tableList, const widechar *inbuf, int inlen, char *hyphens, | | ^~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_hyphenate’ |...... | 4030 | if (table == NULL || inbuf == NULL || hyphens == NULL || | | ~ | | | | | (2) following ‘false’ branch... | ‘lou_hyphenate’: event 3 | | 4031 | table->hyphenStatesArray == 0 || inlen >= HYPHSTRING) | | ^ | | | | | (3) ...to here | ‘lou_hyphenate’: events 4-10 | | 4031 | table->hyphenStatesArray == 0 || inlen >= HYPHSTRING) | | ^ | | | | | (4) following ‘false’ branch (when ‘inlen <= 99’)... | 4032 | return 0; | 4033 | if (mode != 0) { | | ~ | | | | | (5) ...to here | | (6) following ‘false’ branch (when ‘mode == 0’)... |...... | 4044 | memcpy(textBuffer, inbuf, CHARSIZE * inlen); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here |...... | 4059 | if (wordStart == textLen) break; | | ~ | | | | | (8) following ‘false’ branch... | 4060 | // find end of word | 4061 | for (wordEnd = wordStart + 1; wordEnd < textLen; wordEnd++) | | ~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (9) ...to here |...... | 4064 | if (!hyphenateWord(&textBuffer[wordStart], wordEnd - wordStart, | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (10) calling ‘hyphenateWord’ from ‘lou_hyphenate’ | 4065 | &textHyphens[wordStart], table)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘hyphenateWord’: events 11-15 | | 1430 | hyphenateWord(const widechar *word, int wordSize, char *hyphens, | | ^~~~~~~~~~~~~ | | | | | (11) entry to ‘hyphenateWord’ |...... | 1442 | if (!table->hyphenStatesArray || (wordSize + 3) > MAXSTRING) return 0; | | ~ | | | | | (12) following ‘false’ branch... | 1443 | prepWord = (widechar *)calloc(wordSize + 3, sizeof(widechar)); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (13) ...to here | | (14) this call could return NULL |...... | 1446 | prepWord[0] = '.'; | | ~~~~~~~~~~~~~~~~~ | | | | | (15) ‘prepWord’ could be NULL: unchecked value from (14) | lou_translateString.c: In function ‘markSyllables’: lou_translateString.c:2501:17: warning: use of uninitialized value ‘transOpcode’ [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 2501 | switch (transOpcode) { | ^~~~~~ ‘translateString’: events 1-2 | | 3577 | translateString(const TranslationTableHeader *table, int mode, int currentPass, | | ^~~~~~~~~~~~~~~ | | | | | (1) entry to ‘translateString’ |...... | 3604 | markSyllables(table, input, typebuf); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) calling ‘markSyllables’ from ‘translateString’ | +--> ‘markSyllables’: events 3-6 | | 2449 | markSyllables( | | ^~~~~~~~~~~~~ | | | | | (3) entry to ‘markSyllables’ |...... | 2457 | int transOpcode; | | ~~~~~~~~~~~ | | | | | (4) region created on stack here | | (5) capacity: 4 bytes |...... | 2460 | if (typebuf == NULL || !table->syllables) return 1; | | ~ | | | | | (6) following ‘false’ branch... | ‘markSyllables’: event 7 | |cc1: | (7): ...to here | ‘markSyllables’: events 8-18 | | 2462 | while (pos < input->length) { /* the main multipass translation loop */ | | ~~~~^~~~~~~~~~~~~~~ | | | | | (8) following ‘true’ branch... | 2463 | int length = input->length - pos; | | ~~~~~~ | | | | | (9) ...to here | 2464 | int tryThis = 0; | 2465 | while (tryThis < 3) { | | ~~~~~~~~~~~ | | | | | (10) following ‘true’ branch (when ‘tryThis <= 2’)... | | (16) following ‘false’ branch (when ‘tryThis > 2’)... | 2466 | TranslationTableOffset ruleOffset = 0; | 2467 | switch (tryThis) { | | ~~~~~~ | | | | | (11) ...to here | | (12) following ‘case 0:’ branch... | 2468 | case 0: | | ~~~~ | | | | | (13) ...to here |...... | 2484 | while (ruleOffset) { | | ~~~~~~~~~~ | | | | | (14) following ‘false’ branch (when ‘ruleOffset == 0’)... |...... | 2499 | tryThis++; | | ~~~~~~~~~ | | | | | (15) ...to here | 2500 | } | 2501 | switch (transOpcode) { | | ~~~~~~ | | | | | (17) ...to here | | (18) use of uninitialized value ‘transOpcode’ here | lou_translateString.c: In function ‘lou_hyphenate’: lou_translateString.c:4050:54: warning: dereference of possibly-NULL ‘textHyphens’ [CWE-690] [-Wanalyzer-possible-null-dereference] 4050 | for (k = 0; k < textLen; k++) textHyphens[k] = '0'; | ~~~~~~~~~~~~~~~^~~~~ ‘lou_hyphenate’: event 1 | | 4030 | if (table == NULL || inbuf == NULL || hyphens == NULL || | | ^ | | | | | (1) following ‘false’ branch... | ‘lou_hyphenate’: event 2 | | 4031 | table->hyphenStatesArray == 0 || inlen >= HYPHSTRING) | | ^ | | | | | (2) ...to here | ‘lou_hyphenate’: events 3-12 | | 4031 | table->hyphenStatesArray == 0 || inlen >= HYPHSTRING) | | ^ | | | | | (3) following ‘false’ branch (when ‘inlen <= 99’)... | 4032 | return 0; | 4033 | if (mode != 0) { | | ~ | | | | | (4) ...to here | | (5) following ‘true’ branch (when ‘mode != 0’)... | 4034 | int brailleLen = inlen; | | ~~~~~~~~~~ | | | | | (6) ...to here |...... | 4037 | if (!lou_backTranslate(tableList, inbuf, &brailleLen, textBuffer, &textLen, NULL, | | ~ | | | | | (7) following ‘false’ branch... |...... | 4042 | textHyphens = malloc((textLen + 1) * sizeof(char)); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (8) ...to here | | (9) this call could return NULL |...... | 4050 | for (k = 0; k < textLen; k++) textHyphens[k] = '0'; | | ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ | | | | | | | | | (12) ‘textHyphens + (sizetype)k’ could be NULL: unchecked value from (9) | | | (11) ...to here | | (10) following ‘true’ branch... | lou_translateString.c:4051:24: warning: dereference of possibly-NULL ‘textHyphens’ [CWE-690] [-Wanalyzer-possible-null-dereference] 4051 | textHyphens[k] = 0; | ~~~~~~~~~~~~~~~^~~ ‘lou_hyphenate’: event 1 | | 4030 | if (table == NULL || inbuf == NULL || hyphens == NULL || | | ^ | | | | | (1) following ‘false’ branch... | ‘lou_hyphenate’: event 2 | | 4031 | table->hyphenStatesArray == 0 || inlen >= HYPHSTRING) | | ^ | | | | | (2) ...to here | ‘lou_hyphenate’: events 3-12 | | 4031 | table->hyphenStatesArray == 0 || inlen >= HYPHSTRING) | | ^ | | | | | (3) following ‘false’ branch (when ‘inlen <= 99’)... | 4032 | return 0; | 4033 | if (mode != 0) { | | ~ | | | | | (4) ...to here | | (5) following ‘true’ branch (when ‘mode != 0’)... | 4034 | int brailleLen = inlen; | | ~~~~~~~~~~ | | | | | (6) ...to here |...... | 4037 | if (!lou_backTranslate(tableList, inbuf, &brailleLen, textBuffer, &textLen, NULL, | | ~ | | | | | (7) following ‘false’ branch... |...... | 4042 | textHyphens = malloc((textLen + 1) * sizeof(char)); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (8) ...to here | | (9) this call could return NULL |...... | 4050 | for (k = 0; k < textLen; k++) textHyphens[k] = '0'; | | ~~~~~~~~~~~ | | | | | (10) following ‘false’ branch... | 4051 | textHyphens[k] = 0; | | ~~~~~~~~~~~~~~~~~~ | | | | | | | (12) ‘textHyphens + (sizetype)k’ could be NULL: unchecked value from (9) | | (11) ...to here | lou_translateString.c: In function ‘putCharacter’: lou_translateString.c:2318:1: warning: stack protector not protecting local variables: variable length buffer [-Wstack-protector] 2318 | putCharacter(widechar character, const TranslationTableHeader *table, int pos, | ^~~~~~~~~~~~ lou_translateString.c: In function ‘translateString.constprop’: lou_translateString.c:3897:36: warning: ‘repwordStart’ may be used uninitialized [-Wmaybe-uninitialized] 3897 | if (posMapping[k] >= repwordStart) { | ^ lou_translateString.c:3598:13: note: ‘repwordStart’ was declared here 3598 | int repwordStart; | ^~~~~~~~~~~~ In file included from /usr/include/string.h:535, from ../gnulib/string.h:41, from lou_translateString.c:34: In function ‘memcpy’, inlined from ‘_lou_translate’ at lou_translateString.c:1296:4: /usr/include/bits/string_fortified.h:29:10: warning: ‘posMapping3’ may be used uninitialized [-Wmaybe-uninitialized] 29 | return __builtin___memcpy_chk (__dest, __src, __len, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 | __glibc_objsize0 (__dest)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~ lou_translateString.c: In function ‘_lou_translate’: lou_translateString.c:1155:14: note: ‘posMapping3’ was declared here 1155 | int *posMapping3; | ^~~~~~~~~~~ lou_translateString.c: In function ‘lou_hyphenate’: lou_translateString.c:4089:29: warning: ‘inputPos’ may be used uninitialized [-Wmaybe-uninitialized] 4089 | int braillePos = inputPos[k]; | ^~~~~~~~~~ lou_translateString.c:4025:14: note: ‘inputPos’ was declared here 4025 | int *inputPos; | ^~~~~~~~ lou_backTranslateString.c:60:1: warning: function declaration isn’t a prototype [-Wstrict-prototypes] 60 | initStringBufferPool() { | ^~~~~~~~~~~~~~~~~~~~ lou_backTranslateString.c: In function ‘initStringBufferPool’: lou_backTranslateString.c:60:1: warning: old-style function definition [-Wold-style-definition] lou_backTranslateString.c: In function ‘undefinedDots’: lou_backTranslateString.c:921:39: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare] 921 | if ((output->length + buflen) > output->maxlength) return 0; | ^ lou_backTranslateString.c: In function ‘matchCurrentInput’: lou_backTranslateString.c:1294:32: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1294 | for (k = passIC + 2; k < passIC + 2 + passInstructions[passIC + 1]; k++) | ^ lou_backTranslateString.c: In function ‘back_swapTest’: lou_backTranslateString.c:1309:33: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1309 | for (curLen = 0; curLen < passInstructions[passIC] + 3; curLen++) { | ^ lou_backTranslateString.c:1320:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1320 | while (curLen < passInstructions[passIC + 4]) { | ^ lou_backTranslateString.c: In function ‘back_passDoTest’: lou_backTranslateString.c:1443:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1443 | for (k = 0; k < (*passInstructions)[*passIC + 5]; k++) { | ^ lou_backTranslateString.c:1459:51: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1459 | k < (*passInstructions)[*passIC + 6] && pos < input->length; | ^ lou_backTranslateString.c: In function ‘back_passDoAction’: lou_backTranslateString.c:1543:77: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 1543 | if ((output->length + passInstructions[passIC + 1]) > output->maxlength) | ^ lou_backTranslateString.c: In function ‘back_selectRule’: lou_backTranslateString.c:719:68: warning: this statement may fall through [-Wimplicit-fallthrough=] 719 | if (ctx.itsALetter || ctx.itsANumber) break; | ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ lou_backTranslateString.c:720:41: note: here 720 | case CTO_Contraction: | ^~~~ lou_backTranslateString.c: In function ‘_lou_backTranslate’: lou_backTranslateString.c:269:31: warning: ‘realInlen’ may be used uninitialized [-Wmaybe-uninitialized] 269 | passPosMapping[realInlen] = output.length; | ^ lou_backTranslateString.c:251:21: note: ‘realInlen’ was declared here 251 | int realInlen; | ^~~~~~~~~ In file included from /usr/include/string.h:535, from ../gnulib/string.h:41, from lou_backTranslateString.c:32: In function ‘memcpy’, inlined from ‘_lou_backTranslate’ at lou_backTranslateString.c:275:4: /usr/include/bits/string_fortified.h:29:10: warning: ‘posMapping3’ may be used uninitialized [-Wmaybe-uninitialized] 29 | return __builtin___memcpy_chk (__dest, __src, __len, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 | __glibc_objsize0 (__dest)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~ lou_backTranslateString.c: In function ‘_lou_backTranslate’: lou_backTranslateString.c:176:14: note: ‘posMapping3’ was declared here 176 | int *posMapping3; | ^~~~~~~~~~~ In function ‘back_selectRule’, inlined from ‘backTranslateString’ at lou_backTranslateString.c:1122:3, inlined from ‘_lou_backTranslate’ at lou_backTranslateString.c:254:16: lou_backTranslateString.c:611:13: warning: ‘multindRule’ may be used uninitialized [-Wmaybe-uninitialized] 611 | if (handleMultind(table, currentDotslen, currentOpcode, currentRule, doingMultind, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 612 | *multindRule)) | ~~~~~~~~~~~~~ lou_backTranslateString.c: In function ‘_lou_backTranslate’: lou_backTranslateString.c:1095:37: note: ‘multindRule’ was declared here 1095 | const TranslationTableRule *multindRule; | ^~~~~~~~~~~ commonTranslationFunctions.c: In function ‘_lou_handlePassVariableTest’: commonTranslationFunctions.c:41:58: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 41 | if (passVariables[instructions[*IC + 1]] != instructions[*IC + 2]) *itsTrue = 0; | ^~ commonTranslationFunctions.c:46:58: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 46 | if (passVariables[instructions[*IC + 1]] >= instructions[*IC + 2]) *itsTrue = 0; | ^~ commonTranslationFunctions.c:51:58: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 51 | if (passVariables[instructions[*IC + 1]] <= instructions[*IC + 2]) *itsTrue = 0; | ^~ commonTranslationFunctions.c:56:58: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 56 | if (passVariables[instructions[*IC + 1]] > instructions[*IC + 2]) *itsTrue = 0; | ^ commonTranslationFunctions.c:61:58: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 61 | if (passVariables[instructions[*IC + 1]] < instructions[*IC + 2]) *itsTrue = 0; | ^ metadata.c: In function ‘list_conj’: metadata.c:59:28: warning: dereference of possibly-NULL ‘list’ [CWE-690] [-Wanalyzer-possible-null-dereference] 59 | list->head = dup ? dup(x) : x; | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~ ‘lou_listTables’: events 1-4 | | 810 | lou_listTables(void) { | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_listTables’ |...... | 815 | for (l = tableIndex; l; l = l->tail) { | | ~ | | | | | (2) following ‘true’ branch (when ‘l’ is non-NULL)... | 816 | TableMeta *table = l->head; | | ~~~~~ | | | | | (3) ...to here | 817 | tables = list_conj( | | ~~~~~~~~~~ | | | | | (4) calling ‘list_conj’ from ‘lou_listTables’ | 818 | tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘list_conj’: events 5-11 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (5) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (6) following ‘true’ branch (when ‘list’ is NULL)... | 58 | list = malloc(sizeof(List)); | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here | | (8) this call could return NULL | 59 | list->head = dup ? dup(x) : x; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (9) following ‘false’ branch (when ‘dup’ is NULL)... | | (10) ...to here | | (11) ‘list’ could be NULL: unchecked value from (8) | metadata.c:65:25: warning: dereference of possibly-NULL ‘l’ [CWE-690] [-Wanalyzer-possible-null-dereference] 65 | l->head = dup ? dup(x) : x; | ~~~~~~~~^~~~~~~~~~~~~~~~~~ ‘lou_listTables’: events 1-4 | | 810 | lou_listTables(void) { | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_listTables’ |...... | 814 | if (!tableIndex) indexTablePath(); | | ~ ~~~~~~~~~~~~~~~~ | | | | | | | (3) ...to here | | | (4) calling ‘indexTablePath’ from ‘lou_listTables’ | | (2) following ‘true’ branch... | +--> ‘indexTablePath’: events 5-6 | | 701 | indexTablePath(void) { | | ^~~~~~~~~~~~~~ | | | | | (5) entry to ‘indexTablePath’ |...... | 708 | tables = listFiles(searchPath); | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) calling ‘listFiles’ from ‘indexTablePath’ | +--> ‘listFiles’: events 7-10 | | 678 | listFiles(char *searchPath) { | | ^~~~~~~~~ | | | | | (7) entry to ‘listFiles’ |...... | 684 | for (n = 0; searchPath[pos + n] != '\0' && searchPath[pos + n] != ','; n++) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (8) following ‘false’ branch... | 685 | ; | 686 | dirName = malloc(n + 1); | | ~~~~~ | | | | | (9) ...to here |...... | 689 | list = listDir(list, dirName); | | ~~~~~~~~~~~~~~~~~~~~~~ | | | | | (10) calling ‘listDir’ from ‘listFiles’ | +--> ‘listDir’: events 11-12 | | 653 | listDir(List *list, char *dirName) { | | ^~~~~~~ | | | | | (11) entry to ‘listDir’ |...... | 658 | if ((dir = opendir(dirName))) { | | ~ | | | | | (12) following ‘true’ branch (when ‘dir’ is non-NULL)... | ‘listDir’: event 13 | |cc1: | (13): ...to here | ‘listDir’: events 14-16 | | 659 | while ((file = readdir(dir))) { | | ^ | | | | | (14) following ‘true’ branch (when ‘file’ is non-NULL)... | 660 | sprintf(fileName, "%s%c%s", dirName, DIR_SEP, file->d_name); | | ~~~~~~~~~~~~ | | | | | (15) ...to here | 661 | if (stat(fileName, &info) == 0 && !(info.st_mode & S_IFDIR)) { | 662 | list = list_conj(list, strdup(fileName), NULL, NULL, free); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (16) calling ‘list_conj’ from ‘listDir’ | +--> ‘list_conj’: events 17-21 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (17) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (18) following ‘true’ branch (when ‘list’ is NULL)... | 58 | list = malloc(sizeof(List)); | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (19) ...to here | 59 | list->head = dup ? dup(x) : x; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (20) following ‘false’ branch (when ‘dup’ is NULL)... | | (21) ...to here | <------+ | ‘listDir’: events 22-27 | | 659 | while ((file = readdir(dir))) { | | ~ | | | | | (23) following ‘true’ branch (when ‘file’ is non-NULL)... | 660 | sprintf(fileName, "%s%c%s", dirName, DIR_SEP, file->d_name); | | ~~~~~~~~~~~~ | | | | | (24) ...to here | 661 | if (stat(fileName, &info) == 0 && !(info.st_mode & S_IFDIR)) { | | ~ | | | | | (25) following ‘true’ branch... | 662 | list = list_conj(list, strdup(fileName), NULL, NULL, free); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (26) ...to here | | (22) returning to ‘listDir’ from ‘list_conj’ | | (27) calling ‘list_conj’ from ‘listDir’ | +--> ‘list_conj’: events 28-36 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (28) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (29) following ‘false’ branch (when ‘list’ is non-NULL)... |...... | 63 | } else if (!cmp) { | | ~ | | | | | (30) ...to here | | (31) following ‘true’ branch (when ‘cmp’ is NULL)... | 64 | List *l = malloc(sizeof(List)); | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (32) ...to here | | (33) this call could return NULL | 65 | l->head = dup ? dup(x) : x; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (34) following ‘false’ branch (when ‘dup’ is NULL)... | | (35) ...to here | | (36) ‘l’ could be NULL: unchecked value from (33) | metadata.c:73:33: warning: use of possibly-NULL ‘x’ where non-null expected [CWE-690] [-Wanalyzer-possible-null-argument] 73 | int c = cmp(l1->head, x); | ^~~~~~~~~~~~~~~~ ‘lou_listTables’: events 1-4 | | 810 | lou_listTables(void) { | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_listTables’ |...... | 815 | for (l = tableIndex; l; l = l->tail) { | | ~ | | | | | (2) following ‘true’ branch (when ‘l’ is non-NULL)... | 816 | TableMeta *table = l->head; | | ~~~~~ | | | | | (3) ...to here | 817 | tables = list_conj( | | ~~~~~~~~~~ | | | | | (4) calling ‘list_conj’ from ‘lou_listTables’ | 818 | tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘list_conj’: events 5-9 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (5) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (6) following ‘true’ branch (when ‘list’ is NULL)... | 58 | list = malloc(sizeof(List)); | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here | 59 | list->head = dup ? dup(x) : x; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (9) ...to here (8) following ‘false’ branch (when ‘dup’ is NULL)... | <------+ | ‘lou_listTables’: events 10-14 | | 815 | for (l = tableIndex; l; l = l->tail) { | | ~ | | | | | (11) following ‘true’ branch (when ‘l’ is non-NULL)... | 816 | TableMeta *table = l->head; | | ~~~~~ | | | | | (12) ...to here | 817 | tables = list_conj( | | ^~~~~~~~~~ | | | | | (10) returning to ‘lou_listTables’ from ‘list_conj’ | | (14) calling ‘list_conj’ from ‘lou_listTables’ | 818 | tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (13) this call could return NULL | +--> ‘list_conj’: events 15-18 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (15) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (16) following ‘false’ branch (when ‘list’ is non-NULL)... |...... | 63 | } else if (!cmp) { | | ~ | | | | | (17) ...to here | | (18) following ‘false’ branch (when ‘cmp’ is non-NULL)... | ‘list_conj’: event 19 | |cc1: | (19): ...to here | ‘list_conj’: events 20-22 | | 72 | while (l1) { | | ^~ | | | | | (20) following ‘true’ branch (when ‘l1’ is non-NULL)... | 73 | int c = cmp(l1->head, x); | | ~~~~~~~~~~~~~~~~ | | | | | (21) ...to here | | (22) argument 2 (‘x’) from (13) could be NULL where non-null expected | In file included from ../gnulib/string.h:41, from metadata.c:27: /usr/include/string.h:156:12: note: argument 2 of ‘strcmp’ must be non-null 156 | extern int strcmp (const char *__s1, const char *__s2) | ^~~~~~ metadata.c:73:33: warning: use of possibly-NULL ‘*l1.head’ where non-null expected [CWE-690] [-Wanalyzer-possible-null-argument] 73 | int c = cmp(l1->head, x); | ^~~~~~~~~~~~~~~~ ‘lou_listTables’: events 1-5 | | 810 | lou_listTables(void) { | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_listTables’ |...... | 815 | for (l = tableIndex; l; l = l->tail) { | | ~ | | | | | (2) following ‘true’ branch (when ‘l’ is non-NULL)... | 816 | TableMeta *table = l->head; | | ~~~~~ | | | | | (3) ...to here | 817 | tables = list_conj( | | ~~~~~~~~~~ | | | | | (5) calling ‘list_conj’ from ‘lou_listTables’ | 818 | tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (4) this call could return NULL | +--> ‘list_conj’: events 6-10 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (6) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (7) following ‘true’ branch (when ‘list’ is NULL)... | 58 | list = malloc(sizeof(List)); | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (8) ...to here | 59 | list->head = dup ? dup(x) : x; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (9) following ‘false’ branch (when ‘dup’ is NULL)... | | (10) ...to here | <------+ | ‘lou_listTables’: events 11-14 | | 815 | for (l = tableIndex; l; l = l->tail) { | | ~ | | | | | (12) following ‘true’ branch (when ‘l’ is non-NULL)... | 816 | TableMeta *table = l->head; | | ~~~~~ | | | | | (13) ...to here | 817 | tables = list_conj( | | ^~~~~~~~~~ | | | | | (11) returning to ‘lou_listTables’ from ‘list_conj’ | | (14) calling ‘list_conj’ from ‘lou_listTables’ | 818 | tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘list_conj’: events 15-18 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (15) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (16) following ‘false’ branch (when ‘list’ is non-NULL)... |...... | 63 | } else if (!cmp) { | | ~ | | | | | (17) ...to here | | (18) following ‘false’ branch (when ‘cmp’ is non-NULL)... | ‘list_conj’: event 19 | |cc1: | (19): ...to here | ‘list_conj’: events 20-22 | | 72 | while (l1) { | | ^~ | | | | | (20) following ‘true’ branch (when ‘l1’ is non-NULL)... | 73 | int c = cmp(l1->head, x); | | ~~~~~~~~~~~~~~~~ | | | | | (21) ...to here | | (22) argument 1 (‘*l1.head’) from (4) could be NULL where non-null expected | /usr/include/string.h:156:12: note: argument 1 of ‘strcmp’ must be non-null 156 | extern int strcmp (const char *__s1, const char *__s2) | ^~~~~~ metadata.c:85:26: warning: dereference of possibly-NULL ‘l3’ [CWE-690] [-Wanalyzer-possible-null-dereference] 85 | l3->head = dup ? dup(x) : x; | ~~~~~~~~~^~~~~~~~~~~~~~~~~~ ‘lou_listTables’: events 1-4 | | 810 | lou_listTables(void) { | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_listTables’ |...... | 815 | for (l = tableIndex; l; l = l->tail) { | | ~ | | | | | (2) following ‘true’ branch (when ‘l’ is non-NULL)... | 816 | TableMeta *table = l->head; | | ~~~~~ | | | | | (3) ...to here | 817 | tables = list_conj( | | ~~~~~~~~~~ | | | | | (4) calling ‘list_conj’ from ‘lou_listTables’ | 818 | tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘list_conj’: events 5-9 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (5) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (6) following ‘true’ branch (when ‘list’ is NULL)... | 58 | list = malloc(sizeof(List)); | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here | 59 | list->head = dup ? dup(x) : x; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (9) ...to here (8) following ‘false’ branch (when ‘dup’ is NULL)... | <------+ | ‘lou_listTables’: events 10-13 | | 815 | for (l = tableIndex; l; l = l->tail) { | | ~ | | | | | (11) following ‘true’ branch (when ‘l’ is non-NULL)... | 816 | TableMeta *table = l->head; | | ~~~~~ | | | | | (12) ...to here | 817 | tables = list_conj( | | ^~~~~~~~~~ | | | | | (10) returning to ‘lou_listTables’ from ‘list_conj’ | | (13) calling ‘list_conj’ from ‘lou_listTables’ | 818 | tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘list_conj’: events 14-17 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (14) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (15) following ‘false’ branch (when ‘list’ is non-NULL)... |...... | 63 | } else if (!cmp) { | | ~ | | | | | (16) ...to here | | (17) following ‘false’ branch (when ‘cmp’ is non-NULL)... | ‘list_conj’: event 18 | |cc1: | (18): ...to here | ‘list_conj’: events 19-24 | | 72 | while (l1) { | | ^~ | | | | | (19) following ‘true’ branch (when ‘l1’ is non-NULL)... | 73 | int c = cmp(l1->head, x); | | ~~~~~~~~~~~~~~~~ | | | | | (20) ...to here |...... | 84 | List *l3 = malloc(sizeof(List)); | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (21) this call could return NULL | 85 | l3->head = dup ? dup(x) : x; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (22) following ‘false’ branch (when ‘dup’ is NULL)... | | (23) ...to here | | (24) ‘l3’ could be NULL: unchecked value from (21) | metadata.c: In function ‘list_toArray’: metadata.c:144:51: warning: dereference of possibly-NULL ‘array’ [CWE-690] [-Wanalyzer-possible-null-dereference] 144 | for (l = list; l; l = l->tail) array[i++] = dup ? dup(l->head) : l->head; | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ‘lou_listTables’: events 1-4 | | 810 | lou_listTables(void) { | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_listTables’ |...... | 815 | for (l = tableIndex; l; l = l->tail) { | | ~ | | | | | (2) following ‘true’ branch (when ‘l’ is non-NULL)... | 816 | TableMeta *table = l->head; | | ~~~~~ | | | | | (3) ...to here | 817 | tables = list_conj( | | ~~~~~~~~~~ | | | | | (4) calling ‘list_conj’ from ‘lou_listTables’ | 818 | tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘list_conj’: events 5-9 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (5) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (6) following ‘true’ branch (when ‘list’ is NULL)... | 58 | list = malloc(sizeof(List)); | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here | 59 | list->head = dup ? dup(x) : x; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (9) ...to here (8) following ‘false’ branch (when ‘dup’ is NULL)... | <------+ | ‘lou_listTables’: events 10-13 | | 815 | for (l = tableIndex; l; l = l->tail) { | | ~ | | | | | (11) following ‘false’ branch (when ‘l’ is NULL)... | 816 | TableMeta *table = l->head; | 817 | tables = list_conj( | | ^~~~~~~~~~ | | | | | (10) returning to ‘lou_listTables’ from ‘list_conj’ | 818 | tables, strdup(table->name), (int (*)(void *, void *))strcmp, NULL, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 819 | } | 820 | tablesArray = list_toArray(tables, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (12) ...to here | | (13) calling ‘list_toArray’ from ‘lou_listTables’ | +--> ‘list_toArray’: events 14-15 | | 138 | list_toArray(List *list, void *(*dup)(void *)) { | | ^~~~~~~~~~~~ | | | | | (14) entry to ‘list_toArray’ |...... | 142 | array = malloc((1 + list_size(list)) * sizeof(void *)); | | ~ | | | | | (15) inlined call to ‘list_size’ from ‘list_toArray’ | +--> ‘list_size’: events 16-18 | | 130 | for (l = list; l; l = l->tail) len++; | | ^ ~~~~~ | | | | | | | (17) ...to here | | (16) following ‘true’ branch (when ‘l’ is non-NULL)... | | (18) following ‘false’ branch (when ‘l’ is NULL)... | <------+ | ‘list_toArray’: events 19-25 | | 142 | array = malloc((1 + list_size(list)) * sizeof(void *)); | | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (19) ...to here | | (20) this call could return NULL | 143 | i = 0; | 144 | for (l = list; l; l = l->tail) array[i++] = dup ? dup(l->head) : l->head; | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | | | (22) ...to here | | | | (23) following ‘false’ branch (when ‘dup’ is NULL)... | | | | (24) ...to here | | | (25) ‘array + (long unsigned int)i * 8’ could be NULL: unchecked value from (20) | | (21) following ‘true’ branch (when ‘l’ is non-NULL)... | metadata.c:145:18: warning: dereference of possibly-NULL ‘array’ [CWE-690] [-Wanalyzer-possible-null-dereference] 145 | array[i] = NULL; | ^ ‘lou_listTables’: events 1-4 | | 810 | lou_listTables(void) { | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_listTables’ |...... | 814 | if (!tableIndex) indexTablePath(); | | ~ ~~~~~~~~~~~~~~~~ | | | | | | | (3) ...to here | | | (4) calling ‘indexTablePath’ from ‘lou_listTables’ | | (2) following ‘true’ branch... | +--> ‘indexTablePath’: events 5-6 | | 701 | indexTablePath(void) { | | ^~~~~~~~~~~~~~ | | | | | (5) entry to ‘indexTablePath’ |...... | 708 | tables = listFiles(searchPath); | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) calling ‘listFiles’ from ‘indexTablePath’ | +--> ‘listFiles’: events 7-9 | | 678 | listFiles(char *searchPath) { | | ^~~~~~~~~ | | | | | (7) entry to ‘listFiles’ |...... | 684 | for (n = 0; searchPath[pos + n] != '\0' && searchPath[pos + n] != ','; n++) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (8) following ‘false’ branch... | 685 | ; | 686 | dirName = malloc(n + 1); | | ~~~~~ | | | | | (9) ...to here | <------+ | ‘indexTablePath’: events 10-11 | | 708 | tables = listFiles(searchPath); | | ^~~~~~~~~~~~~~~~~~~~~ | | | | | (10) returning to ‘indexTablePath’ from ‘listFiles’ | 709 | tablesArray = list_toArray(tables, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (11) calling ‘list_toArray’ from ‘indexTablePath’ | +--> ‘list_toArray’: events 12-13 | | 138 | list_toArray(List *list, void *(*dup)(void *)) { | | ^~~~~~~~~~~~ | | | | | (12) entry to ‘list_toArray’ |...... | 142 | array = malloc((1 + list_size(list)) * sizeof(void *)); | | ~ | | | | | (13) inlined call to ‘list_size’ from ‘list_toArray’ | +--> ‘list_size’: event 14 | | 130 | for (l = list; l; l = l->tail) len++; | | ^ | | | | | (14) following ‘false’ branch (when ‘l’ is NULL)... | <------+ | ‘list_toArray’: events 15-18 | | 142 | array = malloc((1 + list_size(list)) * sizeof(void *)); | | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (15) ...to here | | (16) this call could return NULL | 143 | i = 0; | 144 | for (l = list; l; l = l->tail) array[i++] = dup ? dup(l->head) : l->head; | | ~ | | | | | (17) following ‘false’ branch (when ‘l’ is NULL)... | 145 | array[i] = NULL; | | ~ | | | | | (18) ...to here | ‘list_toArray’: event 19 | | 145 | array[i] = NULL; | | ^ | | | | | (19) ‘array + (long unsigned int)i * 8’ could be NULL: unchecked value from (16) | metadata.c: In function ‘widestrToStr’: metadata.c:418:43: warning: dereference of possibly-NULL ‘result’ [CWE-690] [-Wanalyzer-possible-null-dereference] 418 | for (k = 0; k < n; k++) result[k] = (char)str[k]; | ~~~~~~~~~~^~~~~~~~~~~~~~ ‘lou_listTables’: events 1-4 | | 810 | lou_listTables(void) { | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_listTables’ |...... | 814 | if (!tableIndex) indexTablePath(); | | ~ ~~~~~~~~~~~~~~~~ | | | | | | | (3) ...to here | | | (4) calling ‘indexTablePath’ from ‘lou_listTables’ | | (2) following ‘true’ branch... | +--> ‘indexTablePath’: events 5-6 | | 701 | indexTablePath(void) { | | ^~~~~~~~~~~~~~ | | | | | (5) entry to ‘indexTablePath’ |...... | 708 | tables = listFiles(searchPath); | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) calling ‘listFiles’ from ‘indexTablePath’ | +--> ‘listFiles’: events 7-10 | | 678 | listFiles(char *searchPath) { | | ^~~~~~~~~ | | | | | (7) entry to ‘listFiles’ |...... | 684 | for (n = 0; searchPath[pos + n] != '\0' && searchPath[pos + n] != ','; n++) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (8) following ‘false’ branch... | 685 | ; | 686 | dirName = malloc(n + 1); | | ~~~~~ | | | | | (9) ...to here |...... | 689 | list = listDir(list, dirName); | | ~~~~~~~~~~~~~~~~~~~~~~ | | | | | (10) calling ‘listDir’ from ‘listFiles’ | +--> ‘listDir’: events 11-12 | | 653 | listDir(List *list, char *dirName) { | | ^~~~~~~ | | | | | (11) entry to ‘listDir’ |...... | 658 | if ((dir = opendir(dirName))) { | | ~ | | | | | (12) following ‘true’ branch (when ‘dir’ is non-NULL)... | ‘listDir’: event 13 | |cc1: | (13): ...to here | ‘listDir’: events 14-16 | | 659 | while ((file = readdir(dir))) { | | ^ | | | | | (14) following ‘true’ branch (when ‘file’ is non-NULL)... | 660 | sprintf(fileName, "%s%c%s", dirName, DIR_SEP, file->d_name); | | ~~~~~~~~~~~~ | | | | | (15) ...to here | 661 | if (stat(fileName, &info) == 0 && !(info.st_mode & S_IFDIR)) { | 662 | list = list_conj(list, strdup(fileName), NULL, NULL, free); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (16) calling ‘list_conj’ from ‘listDir’ | +--> ‘list_conj’: events 17-21 | | 55 | list_conj(List *list, void *x, int (*cmp)(void *, void *), void *(*dup)(void *), | | ^~~~~~~~~ | | | | | (17) entry to ‘list_conj’ | 56 | void (*free)(void *)) { | 57 | if (!list) { | | ~ | | | | | (18) following ‘true’ branch (when ‘list’ is NULL)... | 58 | list = malloc(sizeof(List)); | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (19) ...to here | 59 | list->head = dup ? dup(x) : x; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (20) following ‘false’ branch (when ‘dup’ is NULL)... | | (21) ...to here | <------+ | ‘listDir’: events 22-24 | | 659 | while ((file = readdir(dir))) { | | ~ | | | | | (23) following ‘true’ branch (when ‘file’ is non-NULL)... | 660 | sprintf(fileName, "%s%c%s", dirName, DIR_SEP, file->d_name); | | ~~~~~~~~~~~~ | | | | | (24) ...to here | 661 | if (stat(fileName, &info) == 0 && !(info.st_mode & S_IFDIR)) { | 662 | list = list_conj(list, strdup(fileName), NULL, NULL, free); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (22) returning to ‘listDir’ from ‘list_conj’ | <------+ | ‘listFiles’: events 25-27 | | 689 | list = listDir(list, dirName); | | ^~~~~~~~~~~~~~~~~~~~~~ | | | | | (25) returning to ‘listFiles’ from ‘listDir’ |...... | 692 | if (searchPath[pos] == '\0') | | ~ | | | | | (26) following ‘true’ branch... |...... | 697 | return list; | | ~~~~ | | | | | (27) ...to here | <------+ | ‘indexTablePath’: events 28-29 | | 708 | tables = listFiles(searchPath); | | ^~~~~~~~~~~~~~~~~~~~~ | | | | | (28) returning to ‘indexTablePath’ from ‘listFiles’ | 709 | tablesArray = list_toArray(tables, NULL); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (29) calling ‘list_toArray’ from ‘indexTablePath’ | +--> ‘list_toArray’: events 30-31 | | 138 | list_toArray(List *list, void *(*dup)(void *)) { | | ^~~~~~~~~~~~ | | | | | (30) entry to ‘list_toArray’ |...... | 142 | array = malloc((1 + list_size(list)) * sizeof(void *)); | | ~ | | | | | (31) inlined call to ‘list_size’ from ‘list_toArray’ | +--> ‘list_size’: events 32-33 | | 130 | for (l = list; l; l = l->tail) len++; | | ^ ~~~~~ | | | | | | | (33) ...to here | | (32) following ‘true’ branch (when ‘l’ is non-NULL)... | <------+ | ‘list_toArray’: events 34-37 | | 144 | for (l = list; l; l = l->tail) array[i++] = dup ? dup(l->head) : l->head; | | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (35) ...to here | | | (36) following ‘false’ branch (when ‘dup’ is NULL)... | | | (37) ...to here | | (34) following ‘true’ branch (when ‘l’ is non-NULL)... | <------+ | ‘indexTablePath’: events 38-39 | | 709 | tablesArray = list_toArray(tables, NULL); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (38) returning to ‘indexTablePath’ from ‘list_toArray’ | 710 | lou_indexTables(tablesArray); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (39) calling ‘lou_indexTables’ from ‘indexTablePath’ | +--> ‘lou_indexTables’: events 40-41 | | 610 | lou_indexTables(const char **tables) { | | ^~~~~~~~~~~~~~~ | | | | | (40) entry to ‘lou_indexTables’ | 611 | const char **table; | 612 | list_free(tableIndex); | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (41) calling ‘list_free’ from ‘lou_indexTables’ | +--> ‘list_free’: events 42-44 | | 100 | list_free(List *list) { | | ^~~~~~~~~ | | | | | (42) entry to ‘list_free’ | 101 | if (list) { | | ~ | | | | | (43) following ‘false’ branch (when ‘list’ is NULL)... |...... | 106 | } | | ~ | | | | | (44) ...to here | <------+ | ‘lou_indexTables’: events 45-48 | | 612 | list_free(tableIndex); | | ^~~~~~~~~~~~~~~~~~~~~ | | | | | (45) returning to ‘lou_indexTables’ from ‘list_free’ | 613 | tableIndex = NULL; | 614 | for (table = tables; *table; table++) { | | ~ | | | | | (46) following ‘true’ branch... | 615 | _lou_logMessage(LOU_LOG_DEBUG, "Analyzing table %s", *table); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (47) ...to here | 616 | List *features = analyzeTable(*table, 1); | | ~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (48) calling ‘analyzeTable’ from ‘lou_indexTables’ | +--> ‘analyzeTable’: events 49-56 | | 428 | analyzeTable(const char *table, int activeOnly) { | | ^~~~~~~~~~~~ | | | | | (49) entry to ‘analyzeTable’ |...... | 436 | if (resolved == NULL) { | | ~ | | | | | (50) following ‘false’ branch (when ‘resolved’ is non-NULL)... |...... | 441 | sprintf(fileName, "%s", *resolved); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (51) ...to here |...... | 444 | for (k = 0; resolved[k]; k += 1) free(resolved[k]); | | ~~~~~~~~ | | | | | (52) following ‘false’ branch... | 445 | free(resolved); | | ~~~~~~~~~~~~~~ | | | | | (53) ...to here | 446 | | 447 | if (k > 1) { | | ~ | | | | | (54) following ‘false’ branch (when ‘k <= 1’)... |...... | 454 | info.fileName = fileName; | | ~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (55) ...to here |...... | 458 | if ((info.in = fopen(info.fileName, "rb"))) { | | ~ | | | | | (56) following ‘true’ branch... | ‘analyzeTable’: event 57 | |cc1: | (57): ...to here | ‘analyzeTable’: events 58-66 | | 461 | while (_lou_getALine(&info)) { | | ^~~~~~~~~~~~~ | | | | | (58) following ‘true’ branch... | 462 | if (info.linelen == 0) | | ~~~~~~~~~~~~ | | | | | (59) ...to here | 463 | ; | 464 | else if (info.line[0] == '#') { | | ~ | | | | | (60) following ‘true’ branch... | 465 | if (info.linelen >= 2 && | | ~ | | | | | (61) ...to here |...... | 475 | if (info.linepos < info.linelen && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (64) following ‘true’ branch... | | (62) following ‘true’ branch... | 476 | isValidChar((char)info.line[info.linepos])) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (63) ...to here |...... | 479 | info.linepos++; | | ~~~~~~~~~~~~~~ | | | | | (65) ...to here |...... | 507 | if (info.linepos == info.linelen) { | | ~ | | | | | (66) following ‘true’ branch... | ‘analyzeTable’: event 67 | | 508 | char *v = val ? widestrToStr(val, valSize) : NULL; | | ^ | | | | | (67) ...to here | ‘analyzeTable’: events 68-72 | | 508 | char *v = val ? widestrToStr(val, valSize) : NULL; | | ^ | | | | | (68) following ‘false’ branch (when ‘val’ is NULL)... | 509 | if (!active) { | | ~ | | | | | (69) ...to here | | (70) following ‘false’ branch... |...... | 530 | char *k = widestrToStr(key, keySize); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (71) ...to here | | (72) calling ‘widestrToStr’ from ‘analyzeTable’ | +--> ‘widestrToStr’: events 73-77 | | 415 | widestrToStr(const widechar *str, size_t n) { | | ^~~~~~~~~~~~ | | | | | (73) entry to ‘widestrToStr’ | 416 | char *result = malloc((1 + n) * sizeof(char)); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (74) this call could return NULL | 417 | size_t k; | 418 | for (k = 0; k < n; k++) result[k] = (char)str[k]; | | ~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | | | (76) ...to here | | | (77) ‘result + k’ could be NULL: unchecked value from (74) | | (75) following ‘true’ branch (when ‘k < n’)... | metadata.c: In function ‘listFiles’: metadata.c:687:28: warning: dereference of possibly-NULL ‘dirName’ [CWE-690] [-Wanalyzer-possible-null-dereference] 687 | dirName[n] = '\0'; | ~~~~~~~~~~~^~~~~~ ‘lou_listTables’: events 1-4 | | 810 | lou_listTables(void) { | | ^~~~~~~~~~~~~~ | | | | | (1) entry to ‘lou_listTables’ |...... | 814 | if (!tableIndex) indexTablePath(); | | ~ ~~~~~~~~~~~~~~~~ | | | | | | | (3) ...to here | | | (4) calling ‘indexTablePath’ from ‘lou_listTables’ | | (2) following ‘true’ branch... | +--> ‘indexTablePath’: events 5-6 | | 701 | indexTablePath(void) { | | ^~~~~~~~~~~~~~ | | | | | (5) entry to ‘indexTablePath’ |...... | 708 | tables = listFiles(searchPath); | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) calling ‘listFiles’ from ‘indexTablePath’ | +--> ‘listFiles’: events 7-11 | | 678 | listFiles(char *searchPath) { | | ^~~~~~~~~ | | | | | (7) entry to ‘listFiles’ |...... | 684 | for (n = 0; searchPath[pos + n] != '\0' && searchPath[pos + n] != ','; n++) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (8) following ‘false’ branch... | 685 | ; | 686 | dirName = malloc(n + 1); | | ~~~~~~~~~~~~~ | | | | | | | (9) ...to here | | (10) this call could return NULL | 687 | dirName[n] = '\0'; | | ~~~~~~~~~~~~~~~~~ | | | | | (11) ‘dirName + (sizetype)n’ could be NULL: unchecked value from (10) | pattern.c: In function ‘pattern_output_expression’: pattern.c:172:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 172 | printf("START\t%d\t%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:172:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 172 | printf("START\t%d\t%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:177:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 177 | printf("( \t%d\t%d\t-> %d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:177:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 177 | printf("( \t%d\t%d\t-> %d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:177:52: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 177 | printf("( \t%d\t%d\t-> %d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:188:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 188 | printf("! \t%d\t%d\t-> %d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:188:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 188 | printf("! \t%d\t%d\t-> %d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:188:52: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 188 | printf("! \t%d\t%d\t-> %d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:199:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 199 | printf("+ \t%d\t%d\t-> %d\t#%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:199:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 199 | printf("+ \t%d\t%d\t-> %d\t#%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:199:52: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 199 | printf("+ \t%d\t%d\t-> %d\t#%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:199:57: warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 199 | printf("+ \t%d\t%d\t-> %d\t#%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:210:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 210 | printf("* \t%d\t%d\t-> %d\t#%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:210:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 210 | printf("* \t%d\t%d\t-> %d\t#%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:210:52: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 210 | printf("* \t%d\t%d\t-> %d\t#%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:210:57: warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 210 | printf("* \t%d\t%d\t-> %d\t#%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:221:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 221 | printf("? \t%d\t%d\t-> %d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:221:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 221 | printf("? \t%d\t%d\t-> %d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:221:52: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 221 | printf("? \t%d\t%d\t-> %d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs), | ~^ | | | int | %d pattern.c:232:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 232 | printf("| \t%d\t%d\t-> %d\t-> %d\n", EXPR_PRV(expr_crs), | ~^ | | | int | %d pattern.c:232:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 232 | printf("| \t%d\t%d\t-> %d\t-> %d\n", EXPR_PRV(expr_crs), | ~^ | | | int | %d pattern.c:232:52: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 232 | printf("| \t%d\t%d\t-> %d\t-> %d\n", EXPR_PRV(expr_crs), | ~^ | | | int | %d pattern.c:232:59: warning: format ‘%d’ expects argument of type ‘int’, but argument 5 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 232 | printf("| \t%d\t%d\t-> %d\t-> %d\n", EXPR_PRV(expr_crs), | ~^ | | | int | %d pattern.c:244:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 244 | printf(". \t%d\t%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:244:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 244 | printf(". \t%d\t%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:249:42: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 249 | printf("%% \t%d\t%d\t", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:249:46: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 249 | printf("%% \t%d\t%d\t", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:274:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 274 | printf("[] \t%d\t%d\t", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:274:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 274 | printf("[] \t%d\t%d\t", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:275:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 275 | for (i = 0; i < EXPR_DATA_0(expr_crs); i++) | ^ pattern.c:276:42: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 276 | printf("%c", EXPR_CONST_DATA(expr_crs)[i + 1]); | ~^ | | | int | %c pattern.c:282:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 282 | printf("@ \t%d\t%d\t", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:282:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 282 | printf("@ \t%d\t%d\t", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:283:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 283 | for (i = 0; i < EXPR_DATA_0(expr_crs); i++) | ^ pattern.c:284:42: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 284 | printf("%c", EXPR_CONST_DATA(expr_crs)[i + 1]); | ~^ | | | int | %c pattern.c:290:41: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 290 | printf("^ \t%d\t%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:290:45: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 290 | printf("^ \t%d\t%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:295:34: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 295 | printf("%d? \t%d\t%d\n", EXPR_TYPE(expr_crs), EXPR_PRV(expr_crs), | ~^ | | | int | %d pattern.c:295:43: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 295 | printf("%d? \t%d\t%d\n", EXPR_TYPE(expr_crs), EXPR_PRV(expr_crs), | ~^ | | | int | %d pattern.c:295:47: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 295 | printf("%d? \t%d\t%d\n", EXPR_TYPE(expr_crs), EXPR_PRV(expr_crs), | ~^ | | | int | %d pattern.c:307:23: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 307 | printf("END\t%d\t%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c:307:27: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 307 | printf("END\t%d\t%d\n", EXPR_PRV(expr_crs), EXPR_NXT(expr_crs)); | ~^ | | | int | %d pattern.c: In function ‘pattern_output’: pattern.c:314:18: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 314 | printf("%d \tlength\n", expr_data[0]); | ~^ ~~~~~~~~~~~~ | | | | int widechar {aka unsigned int} | %d pattern.c:315:18: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 315 | printf("%d \tloops\n", expr_data[1]); | ~^ ~~~~~~~~~~~~ | | | | int widechar {aka unsigned int} | %d pattern.c: In function ‘pattern_print_expression’: pattern.c:403:42: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 403 | printf("%c", EXPR_DATA_1(expr_crs)); | ~^ | | | int | %c pattern.c:406:47: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 406 | for (i = 0; i < EXPR_DATA_0(expr_crs); i++) | ^ pattern.c:407:50: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 407 | printf("%c", EXPR_CONST_DATA(expr_crs)[i + 1]); | ~^ | | | int | %c pattern.c:415:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 415 | for (i = 0; i < EXPR_DATA_0(expr_crs); i++) | ^ pattern.c:416:42: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 416 | printf("%c", EXPR_CONST_DATA(expr_crs)[i + 1]); | ~^ | | | int | %c pattern.c: In function ‘pattern_compile_expression’: pattern.c:608:36: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 608 | if (*expr_crs + 10 >= expr_max) return 0; | ^~ pattern.c:657:36: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 657 | if (*expr_crs + 10 >= expr_max) return 0; | ^~ pattern.c:682:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 682 | if (*expr_crs + 3 >= expr_max) return 0; | ^~ pattern.c:696:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 696 | if (*expr_crs + 5 >= expr_max) return 0; | ^~ pattern.c:704:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 704 | if (*expr_crs + 5 >= expr_max) return 0; | ^~ pattern.c:712:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 712 | if (*expr_crs + 4 >= expr_max) return 0; | ^~ pattern.c:719:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 719 | if (*expr_crs + 5 >= expr_max) return 0; | ^~ pattern.c:726:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 726 | if (*expr_crs + 3 >= expr_max) return 0; | ^~ pattern.c:733:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 733 | if (*expr_crs + 5 >= expr_max) return 0; | ^~ pattern.c:843:62: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 843 | if (*expr_crs + 4 + (input_end - *input_crs) >= expr_max) return 0; | ^~ pattern.c:879:62: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 879 | if (*expr_crs + 4 + (input_end - *input_crs) >= expr_max) return 0; | ^~ pattern.c:901:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 901 | if (*expr_crs + 3 >= expr_max) return 0; | ^~ pattern.c:913:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 913 | if (*expr_crs + 5 >= expr_max) return 0; | ^~ pattern.c: In function ‘pattern_insert_alternate’: pattern.c:930:28: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 930 | if (*expr_crs + 12 >= expr_max) return 0; | ^~ pattern.c:957:27: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 957 | if (*expr_crs + 3 >= expr_max) return 0; | ^~ pattern.c: In function ‘pattern_compile_1’: pattern.c:992:27: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 992 | if (*expr_crs + 6 >= expr_max) return 0; | ^~ pattern.c:1014:35: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 1014 | if (*expr_crs + 3 >= expr_max) return 0; | ^~ pattern.c: In function ‘pattern_compile_2’: pattern.c:1049:43: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 1049 | if (*expr_crs + 6 >= expr_max) return 0; | ^~ pattern.c: In function ‘pattern_compile_3’: pattern.c:1104:44: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 1104 | if (*expr_crs + 12 >= expr_max) return 0; | ^~ pattern.c: In function ‘pattern_reverse_expression’: pattern.c:1254:25: warning: comparison of integer expressions of different signedness: ‘widechar’ {aka ‘unsigned int’} and ‘int’ [-Wsign-compare] 1254 | while (expr_prv != expr_start) { | ^~ pattern.c: In function ‘pattern_check_expression’: pattern.c:1319:49: warning: logical ‘and’ of equal expressions [-Wlogical-op] 1319 | while (!(EXPR_TYPE(expr_crs) == PTN_END && EXPR_TYPE(expr_crs) == PTN_END)) { | ^~ pattern.c:1532:39: warning: comparison of integer expressions of different signedness: ‘int’ and ‘widechar’ {aka ‘unsigned int’} [-Wsign-compare] 1532 | for (i = 0; i < data[0]; i++) hook_data[i] = data[i + 1]; | ^ pattern.c: In function ‘pattern_compile_expression’: pattern.c:909:20: warning: this statement may fall through [-Wimplicit-fallthrough=] 909 | if (*input_crs >= input_max) return 0; | ^ pattern.c:911:9: note: here 911 | default: | ^~~~~~~ pattern.c: In function ‘pattern_reverse_branch’: pattern.c:1219:38: warning: this statement may fall through [-Wimplicit-fallthrough=] 1219 | EXPR_DATA_1(expr_at) = expr_swap; | ^ pattern.c:1221:9: note: here 1221 | case PTN_GROUP: | ^~~~ pattern.c: At top level: pattern.c:923:1: warning: ‘pattern_insert_alternate’ defined but not used [-Wunused-function] 923 | pattern_insert_alternate(const widechar *input, const int input_max, int *input_crs, | ^~~~~~~~~~~~~~~~~~~~~~~~ pattern.c:435:1: warning: ‘pattern_print’ defined but not used [-Wunused-function] 435 | pattern_print(const widechar *expr_data, const TranslationTableHeader *table) { | ^~~~~~~~~~~~~ pattern.c:313:1: warning: ‘pattern_output’ defined but not used [-Wunused-function] 313 | pattern_output(const widechar *expr_data, const TranslationTableHeader *table) { | ^~~~~~~~~~~~~~ pattern.c:110: warning: macro "EXPR_DATA_2" is not used [-Wunused-macros] 110 | #define EXPR_DATA_2(at) EXPR_DATA_2_IN((at), expr_data) | pattern.c:101: warning: macro "EXPR_DATA_2_IN" is not used [-Wunused-macros] 101 | #define EXPR_DATA_2_IN(at, buffer) (buffer[(at) + 5]) | logging.c: In function ‘_lou_logWidecharBuf’: logging.c:57:17: warning: format not a string literal, argument types not checked [-Wformat-nonliteral] 57 | p += sprintf(p, formatString, wbuf[i]); | ^ logging.c: In function ‘defaultLogCallback’: logging.c:76:30: warning: unused parameter ‘level’ [-Wunused-parameter] 76 | defaultLogCallback(logLevels level, const char *message) { | ~~~~~~~~~~^~~~~ logging.c: In function ‘_lou_logWidecharBuf’: logging.c:54:58: warning: dereference of possibly-NULL ‘logMsg’ [CWE-690] [-Wanalyzer-possible-null-dereference] 54 | for (i = 0; i < (int)strlen(msg); i++) logMsg[i] = msg[i]; | ~~~~~~~~~~^~~~~~~~ ‘_lou_logWidecharBuf’: events 1-4 | | 46 | char *logMsg = malloc(logBufSize); | | ^~~~~~~~~~~~~~~~~~ | | | | | (1) this call could return NULL |...... | 54 | for (i = 0; i < (int)strlen(msg); i++) logMsg[i] = msg[i]; | | ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ | | | | | | | | | (3) ...to here | | (2) following ‘true’ branch... (4) ‘logMsg + (sizetype)i’ could be NULL: unchecked value from (1) | utils.c: In function ‘toLowercase’: utils.c:120:66: warning: declaration of ‘c’ shadows a parameter [-Wshadow] 120 | const TranslationTableCharacter *c = character; | ^ utils.c:112:22: note: shadowed declaration is here 112 | toLowercase(widechar c, const TranslationTableHeader *table) { | ~~~~~~~~~^ utils.c: In function ‘_lou_isValidMode’: utils.c:336:27: warning: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Wsign-compare] 336 | for (int i = 0; i < (sizeof(validTranslationModes) / sizeof(*validTranslationModes)); | ^ maketable.c:30:1: warning: no previous prototype for ‘loadTable’ [-Wmissing-prototypes] 30 | loadTable(const char *tableList) { | ^~~~~~~~~ maketable.c:35:1: warning: function declaration isn’t a prototype [-Wstrict-prototypes] 35 | hyphenationEnabled() { | ^~~~~~~~~~~~~~~~~~ maketable.c: In function ‘hyphenationEnabled’: maketable.c:35:1: warning: old-style function definition [-Wold-style-definition] maketable.c: At top level: maketable.c:40:1: warning: no previous prototype for ‘isLetter’ [-Wmissing-prototypes] 40 | isLetter(widechar c) { | ^~~~~~~~ maketable.c:55:1: warning: no previous prototype for ‘toLowercase’ [-Wmissing-prototypes] 55 | toLowercase(widechar c) { | ^~~~~~~~~~~ maketable.c: In function ‘toLowercase’: maketable.c:63:66: warning: declaration of ‘c’ shadows a parameter [-Wshadow] 63 | const TranslationTableCharacter *c = character; | ^ maketable.c:55:22: note: shadowed declaration is here 55 | toLowercase(widechar c) { | ~~~~~~~~~^ maketable.c: At top level: maketable.c:82:1: warning: no previous prototype for ‘toDotPattern’ [-Wmissing-prototypes] 82 | toDotPattern(widechar *braille, char *pattern) { | ^~~~~~~~~~~~ maketable.c:95:1: warning: no previous prototype for ‘printRule’ [-Wmissing-prototypes] 95 | printRule(TranslationTableRule *rule, widechar *rule_string) { | ^~~~~~~~~ maketable.c: In function ‘printRule’: maketable.c:108:40: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 108 | for (char *c = "nocross "; *c; c++) rule_string[l++] = *c; | ^~~~~~~~~~ maketable.c: At top level: maketable.c:385:1: warning: no previous prototype for ‘suggestChunks’ [-Wmissing-prototypes] 385 | suggestChunks(widechar *text, widechar *braille, char *hyphen_string) { | ^~~~~~~~~~~~~ maketable.c:400:1: warning: no previous prototype for ‘findRelevantRules’ [-Wmissing-prototypes] 400 | findRelevantRules(widechar *text, widechar **rules_str) { | ^~~~~~~~~~~~~~~~~ maketable.c: In function ‘findRelevantRules’: maketable.c:454:44: warning: dereference of possibly-NULL ‘rules’ [CWE-690] [-Wanalyzer-possible-null-dereference] 454 | rules[m++] = rule; | ~~~~~~~~~~~^~~~~~ ‘findRelevantRules’: events 1-2 | | 411 | rules = (TranslationTableRule **)malloc( | | ^~~~~~~ | | | | | (1) this call could return NULL | 412 | (rules_len + 1) * sizeof(TranslationTableRule *)); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 413 | m = n = 0; | 414 | while (text[n]) { | | ~~~~ | | | | | (2) following ‘true’ branch... | ‘findRelevantRules’: event 3 | |cc1: | (3): ...to here | ‘findRelevantRules’: events 4-10 | | 415 | for (hash_len = 2; hash_len >= 1; hash_len--) { | | ~~~~~~~~~^~~~ | | | | | (4) following ‘true’ branch (when ‘hash_len != 0’)... | 416 | offset = 0; | 417 | switch (hash_len) { | | ~~~~~~ | | | | | (5) ...to here | | (6) following ‘true’ branch (when ‘hash_len == 2’)... | 418 | case 2: | | ~~~~ | | | | | (7) ...to here |...... | 433 | while (offset) { | | ~~~~~~ | | | | | (8) following ‘true’ branch (when ‘offset != 0’)... | 434 | rule = (TranslationTableRule *)&table->ruleArea[offset]; | | ~~ | | | | | (9) ...to here |...... | 454 | rules[m++] = rule; | | ~~~~~~~~~~~~~~~~~ | | | | | (10) ‘rules + (long unsigned int)m * 8’ could be NULL: unchecked value from (1) | brl_checks.c: In function ‘check_base’: brl_checks.c:126:35: warning: passing argument 1 of ‘parsed_strlen’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 126 | int inlen = parsed_strlen(input); | ^~~~~ brl_checks.c:50:21: note: expected ‘char *’ but argument is of type ‘const char *’ 50 | parsed_strlen(char *s) { | ~~~~~~^ brl_checks.c: At top level: brl_checks.c:61:1: warning: ‘print_int_array’ defined but not used [-Wunused-function] 61 | print_int_array(const char *prefix, int *pos_list, int len) { | ^~~~~~~~~~~~~~~ brl_checks.c: In function ‘convert_typeform’: brl_checks.c:342:47: warning: dereference of possibly-NULL ‘typeform’ [CWE-690] [-Wanalyzer-possible-null-dereference] 342 | for (i = 0; i < len; i++) typeform[i] = typeform_string[i] - '0'; | ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ ‘convert_typeform’: events 1-4 | | 340 | formtype *typeform = malloc(len * sizeof(formtype)); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (1) this call could return NULL | 341 | int i; | 342 | for (i = 0; i < len; i++) typeform[i] = typeform_string[i] - '0'; | | ~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | | | (3) ...to here | | | (4) ‘typeform + (sizetype)i * 2’ could be NULL: unchecked value from (1) | | (2) following ‘true’ branch (when ‘i < len’)... | brl_checks.c: In function ‘check_hyphenation’: brl_checks.c:565:28: warning: dereference of possibly-NULL ‘hyphenatedbuf’ [CWE-690] [-Wanalyzer-possible-null-dereference] 565 | hyphenatedbuf[i++] = inbuf[j++]; | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ ‘check_hyphenation’: events 1-8 | | 544 | if (!inlen) { | | ^ | | | | | (1) following ‘false’ branch (when ‘inlen != 0’)... |...... | 549 | hyphens = calloc(inlen + 1, sizeof(char)); | | ~~~~~~~~~ | | | | | (2) ...to here | 550 | | 551 | if (!lou_hyphenate(tableList, inbuf, inlen, hyphens, mode)) { | | ~ | | | | | (3) following ‘false’ branch... |...... | 556 | if (hyphens[0] != '0') { | | ~~~~~~~~~~~ | | | | | | | (4) ...to here | | (5) following ‘false’ branch... |...... | 562 | hyphenatedbuf = malloc(sizeof(widechar) * hyphenatedlen); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (6) ...to here | | (7) this call could return NULL |...... | 565 | hyphenatedbuf[i++] = inbuf[j++]; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (8) ‘hyphenatedbuf’ could be NULL: unchecked value from (7) | brl_checks.c: In function ‘check_display’: brl_checks.c:438:18: warning: argument 1 range [18446744065119617024, 18446744073709551612] exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=] 438 | outbuf = malloc(sizeof(widechar) * inlen); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from brl_checks.c:25: ../tools/gnulib/stdlib.h:1044:1: note: in a call to allocation function ‘malloc’ declared here 1044 | _GL_FUNCDECL_SYS (malloc, void *, | ^~~~~~~~~~~~~~~~ lou_checkhyphens.c: In function ‘main’: lou_checkhyphens.c:204:42: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 204 | printf("%c", inbuf[k]); | ~^ ~~~~~~~~ | | | | int widechar {aka unsigned int} | %c lou_debug.c: In function ‘print_chars’: lou_debug.c:104:16: warning: pointer targets in returning ‘uint8_t *’ {aka ‘unsigned char *’} from a function with return type ‘char *’ differ in signedness [-Wpointer-sign] 104 | return result_buf; | ^~~~~~~~~~ lou_debug.c: In function ‘printRule’: lou_debug.c:111:47: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘TranslationTableCharacterAttributes’ {aka ‘long long unsigned int’} [-Wformat=] 111 | if (thisRule->before) printf("before=%x, ", thisRule->before); | ~^ ~~~~~~~~~~~~~~~~ | | | | unsigned int TranslationTableCharacterAttributes {aka long long unsigned int} | %llx lou_debug.c:112:45: warning: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘TranslationTableCharacterAttributes’ {aka ‘long long unsigned int’} [-Wformat=] 112 | if (thisRule->after) printf("after=%x, ", thisRule->after); | ~^ ~~~~~~~~~~~~~~~ | | | | unsigned int TranslationTableCharacterAttributes {aka long long unsigned int} | %llx lou_debug.c: In function ‘show_brailleIndicators’: lou_debug.c:321:25: warning: format not a string literal, argument types not checked [-Wformat-nonliteral] 321 | snprintf(name, BUFSIZE, emphNames[offset], table->emphClasses[i]); | ^~~~~~~~ lou_debug.c:324:57: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘EmphasisClass’ [-Wformat=] 324 | snprintf(name, BUFSIZE, "lenemphphrase %s", table->emphClasses[i]); | ~^ ~~~~~~~~~~~~~~~~~~~~~ | | | | char * EmphasisClass lou_trace.c: In function ‘get_input’: lou_trace.c:77:26: warning: comparison of unsigned expression in ‘< 0’ is always false [-Wtype-limits] 77 | if (input_length < 0) exit(0); | ^ lou_trace.c: In function ‘print_chars’: lou_trace.c:97:16: warning: pointer targets in returning ‘uint8_t *’ {aka ‘unsigned char *’} from a function with return type ‘char *’ differ in signedness [-Wpointer-sign] 97 | return result_buf; | ^~~~~~~~~~ lou_trace.c: In function ‘print_number’: lou_trace.c:110:27: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘widechar’ {aka ‘unsigned int’} [-Wformat=] 110 | sprintf(number, "%d", c); | ~^ ~ | | | | int widechar {aka unsigned int} | %d lou_checkyaml.c: In function ‘read_table_value’: lou_checkyaml.c:274:30: warning: passing argument 1 of ‘free’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 274 | free(table_file_name_check); | ^~~~~~~~~~~~~~~~~~~~~ In file included from ../tools/gnulib/stdlib.h:36, from lou_checkyaml.c:25: /usr/include/stdlib.h:555:25: note: expected ‘void *’ but argument is of type ‘const char *’ 555 | extern void free (void *__ptr) __THROW; | ~~~~~~^~~~~ In file included from lou_checkyaml.c:33: lou_checkyaml.c: In function ‘check_translation’: lou_checkyaml.c:783:62: warning: initialized field overwritten [-Woverride-init] 783 | r = check(table, word, translation, .display_table = display_table, | ^~~~~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:783:62: note: (near initialization for ‘(anonymous).display_table’) 783 | r = check(table, word, translation, .display_table = display_table, | ^~~~~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:784:37: warning: initialized field overwritten [-Woverride-init] 784 | .typeform = typeform, .mode = mode, .expected_inputPos = expected_inputPos, | ^~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:784:37: note: (near initialization for ‘(anonymous).typeform’) 784 | .typeform = typeform, .mode = mode, .expected_inputPos = expected_inputPos, | ^~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:784:55: warning: initialized field overwritten [-Woverride-init] 784 | .typeform = typeform, .mode = mode, .expected_inputPos = expected_inputPos, | ^~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:784:55: note: (near initialization for ‘(anonymous).mode’) 784 | .typeform = typeform, .mode = mode, .expected_inputPos = expected_inputPos, | ^~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:784:82: warning: initialized field overwritten [-Woverride-init] 784 | .typeform = typeform, .mode = mode, .expected_inputPos = expected_inputPos, | ^~~~~~~~~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:784:82: note: (near initialization for ‘(anonymous).expected_inputPos’) 784 | .typeform = typeform, .mode = mode, .expected_inputPos = expected_inputPos, | ^~~~~~~~~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:785:47: warning: initialized field overwritten [-Woverride-init] 785 | .expected_outputPos = expected_outputPos, .cursorPos = cursorPos, | ^~~~~~~~~~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:785:47: note: (near initialization for ‘(anonymous).expected_outputPos’) 785 | .expected_outputPos = expected_outputPos, .cursorPos = cursorPos, | ^~~~~~~~~~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:785:80: warning: initialized field overwritten [-Woverride-init] 785 | .expected_outputPos = expected_outputPos, .cursorPos = cursorPos, | ^~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:785:80: note: (near initialization for ‘(anonymous).cursorPos’) 785 | .expected_outputPos = expected_outputPos, .cursorPos = cursorPos, | ^~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:786:47: warning: initialized field overwritten [-Woverride-init] 786 | .expected_cursorPos = expected_cursorPos, .max_outlen = max_outlen, | ^~~~~~~~~~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:786:47: note: (near initialization for ‘(anonymous).expected_cursorPos’) 786 | .expected_cursorPos = expected_cursorPos, .max_outlen = max_outlen, | ^~~~~~~~~~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:786:81: warning: initialized field overwritten [-Woverride-init] 786 | .expected_cursorPos = expected_cursorPos, .max_outlen = max_outlen, | ^~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:786:81: note: (near initialization for ‘(anonymous).max_outlen’) 786 | .expected_cursorPos = expected_cursorPos, .max_outlen = max_outlen, | ^~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:787:39: warning: initialized field overwritten [-Woverride-init] 787 | .real_inlen = real_inlen, .direction = direction, .diagnostics = !xfail); | ^~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:787:39: note: (near initialization for ‘(anonymous).real_inlen’) 787 | .real_inlen = real_inlen, .direction = direction, .diagnostics = !xfail); | ^~~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:787:64: warning: initialized field overwritten [-Woverride-init] 787 | .real_inlen = real_inlen, .direction = direction, .diagnostics = !xfail); | ^~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:787:64: note: (near initialization for ‘(anonymous).direction’) 787 | .real_inlen = real_inlen, .direction = direction, .diagnostics = !xfail); | ^~~~~~~~~ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:787:90: warning: initialized field overwritten [-Woverride-init] 787 | .real_inlen = real_inlen, .direction = direction, .diagnostics = !xfail); | ^ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c:787:90: note: (near initialization for ‘(anonymous).diagnostics’) 787 | .real_inlen = real_inlen, .direction = direction, .diagnostics = !xfail); | ^ brl_checks.h:103:41: note: in definition of macro ‘check’ 103 | __VA_ARGS__ }) | ^~~~~~~~~~~ lou_checkyaml.c: In function ‘main’: lou_checkyaml.c:1078:9: warning: ISO C90 forbids variable length array ‘tables’ [-Wvla] 1078 | char *tables[MAXTABLES + 1]; | ^~~~ lou_checkyaml.c: In function ‘read_table_query’: lou_checkyaml.c:140:28: warning: dereference of possibly-NULL ‘query_as_string’ [CWE-690] [-Wanalyzer-possible-null-dereference] 140 | query_as_string[0] = '\0'; | ~~~~~~~~~~~~~~~~~~~^~~~~~ ‘main’: events 1-9 | | 968 | main(int argc, char *argv[]) { | | ^~~~ | | | | | (1) entry to ‘main’ |...... | 973 | while ((optc = getopt_long(argc, argv, "hv", longopts, NULL)) != -1) switch (optc) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) following ‘false’ branch (when ‘optc == -1’)... |...... | 990 | if (optind != argc - 1) { | | ~ ~~~~~~~~ | | | | | | | (3) ...to here | | (4) following ‘false’ branch... |...... | 1021 | file_name = argv[1]; | | ~~~~~~~~~~~~~~~~~~~ | | | | | (5) ...to here | 1022 | file = fopen(file_name, "rb"); | 1023 | if (!file) { | | ~ | | | | | (6) following ‘false’ branch (when ‘file’ is non-NULL)... |...... | 1028 | char *dir_name = strdup(file_name); | | ~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here |...... | 1041 | if (i > 0) | | ~ | | | | | (8) following ‘false’ branch (when ‘i <= 0’)... |...... | 1044 | free(dir_name); | | ~~~~~~~~~~~~~~ | | | | | (9) ...to here | ‘main’: event 10 | | 1049 | assert(yaml_parser_initialize(&parser)); | | ^~~~~~ | | | | | (10) following ‘true’ branch... | ‘main’: events 11-28 | | 1051 | yaml_parser_set_input_file(&parser, file); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (11) ...to here | 1052 | | 1053 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_STREAM_START_EVENT)) { | | ~ | | | | | (12) following ‘false’ branch... |...... | 1057 | if (event.data.stream_start.encoding != YAML_UTF8_ENCODING) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (13) ...to here | | (14) following ‘false’ branch... |...... | 1061 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (15) ...to here | 1062 | | 1063 | if (!yaml_parser_parse(&parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (16) following ‘false’ branch... (18) following ‘false’ branch... | 1064 | (event.type != YAML_DOCUMENT_START_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (17) ...to here |...... | 1067 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (19) ...to here | 1068 | | 1069 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_MAPPING_START_EVENT)) { | | ~ | | | | | (20) following ‘false’ branch... |...... | 1072 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (21) ...to here | 1073 | | 1074 | if (!yaml_parser_parse(&parser, &event)) | | ~ | | | | | (22) following ‘false’ branch... |...... | 1078 | char *tables[MAXTABLES + 1]; | | ~~~~ | | | | | (23) ...to here |...... | 1081 | if (event.type == YAML_SCALAR_EVENT && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (24) following ‘true’ branch... (26) following ‘true’ branch (when the strings are equal)... | 1082 | !strcmp((const char *)event.data.scalar.value, "display")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (25) ...to here | 1083 | table_value *v; | 1084 | free(display_table); | | ~~~~~~~~~~~~~~~~~~~ | | | | | (27) ...to here | 1085 | v = read_table_value(&parser, event.start_mark.line + 1, 1); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (28) calling ‘read_table_value’ from ‘main’ | +--> ‘read_table_value’: events 29-38 | | 205 | read_table_value(yaml_parser_t *parser, int start_line, int is_display) { | | ^~~~~~~~~~~~~~~~ | | | | | (29) entry to ‘read_table_value’ |...... | 211 | if (!yaml_parser_parse(parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (30) following ‘false’ branch... (32) following ‘false’ branch... | 212 | !(event.type == YAML_SEQUENCE_START_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (31) ...to here | 213 | event.type == YAML_SCALAR_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 214 | event.type == YAML_MAPPING_START_EVENT)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |...... | 219 | if (event.type == YAML_SEQUENCE_START_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (33) ...to here | | (34) following ‘false’ branch... |...... | 236 | } else if (event.type == YAML_SCALAR_EVENT) { | | ~ | | | | | (35) ...to here | | (36) following ‘false’ branch... |...... | 252 | const char *table_file_name_check = NULL; | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (37) ...to here | 253 | yaml_event_delete(&event); | 254 | query = read_table_query(parser, &table_file_name_check); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (38) calling ‘read_table_query’ from ‘read_table_value’ | +--> ‘read_table_query’: events 39-41 | | 136 | read_table_query(yaml_parser_t *parser, const char **table_file_name_check) { | | ^~~~~~~~~~~~~~~~ | | | | | (39) entry to ‘read_table_query’ | 137 | yaml_event_t event; | 138 | char *query_as_string = malloc(sizeof(char) * MAXSTRING); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (40) this call could return NULL | 139 | char *p = query_as_string; | 140 | query_as_string[0] = '\0'; | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (41) ‘query_as_string’ could be NULL: unchecked value from (40) | lou_checkyaml.c: In function ‘read_table_value’: lou_checkyaml.c:210:23: warning: dereference of possibly-NULL ‘table_name’ [CWE-690] [-Wanalyzer-possible-null-dereference] 210 | table_name[0] = '\0'; | ~~~~~~~~~~~~~~^~~~~~ ‘main’: events 1-11 | | 968 | main(int argc, char *argv[]) { | | ^~~~ | | | | | (1) entry to ‘main’ |...... | 973 | while ((optc = getopt_long(argc, argv, "hv", longopts, NULL)) != -1) switch (optc) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) following ‘false’ branch (when ‘optc == -1’)... |...... | 990 | if (optind != argc - 1) { | | ~ ~~~~~~~~ | | | | | | | (3) ...to here | | (4) following ‘false’ branch... |...... | 1021 | file_name = argv[1]; | | ~~~~~~~~~~~~~~~~~~~ | | | | | (5) ...to here | 1022 | file = fopen(file_name, "rb"); | 1023 | if (!file) { | | ~ | | | | | (6) following ‘false’ branch (when ‘file’ is non-NULL)... |...... | 1028 | char *dir_name = strdup(file_name); | | ~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here | | (8) this call could return NULL | 1029 | int i = strlen(dir_name); | | ~~~~~~~~~~~~~~~~ | | | | | (9) assuming ‘dir_name’ is non-NULL |...... | 1041 | if (i > 0) | | ~ | | | | | (10) following ‘false’ branch (when ‘i <= 0’)... |...... | 1044 | free(dir_name); | | ~~~~~~~~~~~~~~ | | | | | (11) ...to here | ‘main’: event 12 | | 1049 | assert(yaml_parser_initialize(&parser)); | | ^~~~~~ | | | | | (12) following ‘true’ branch... | ‘main’: events 13-30 | | 1051 | yaml_parser_set_input_file(&parser, file); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (13) ...to here | 1052 | | 1053 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_STREAM_START_EVENT)) { | | ~ | | | | | (14) following ‘false’ branch... |...... | 1057 | if (event.data.stream_start.encoding != YAML_UTF8_ENCODING) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (15) ...to here | | (16) following ‘false’ branch... |...... | 1061 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (17) ...to here | 1062 | | 1063 | if (!yaml_parser_parse(&parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (18) following ‘false’ branch... (20) following ‘false’ branch... | 1064 | (event.type != YAML_DOCUMENT_START_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (19) ...to here |...... | 1067 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (21) ...to here | 1068 | | 1069 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_MAPPING_START_EVENT)) { | | ~ | | | | | (22) following ‘false’ branch... |...... | 1072 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (23) ...to here | 1073 | | 1074 | if (!yaml_parser_parse(&parser, &event)) | | ~ | | | | | (24) following ‘false’ branch... |...... | 1078 | char *tables[MAXTABLES + 1]; | | ~~~~ | | | | | (25) ...to here |...... | 1081 | if (event.type == YAML_SCALAR_EVENT && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (26) following ‘true’ branch... (28) following ‘true’ branch (when the strings are equal)... | 1082 | !strcmp((const char *)event.data.scalar.value, "display")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (27) ...to here | 1083 | table_value *v; | 1084 | free(display_table); | | ~~~~~~~~~~~~~~~~~~~ | | | | | (29) ...to here | 1085 | v = read_table_value(&parser, event.start_mark.line + 1, 1); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (30) calling ‘read_table_value’ from ‘main’ | +--> ‘read_table_value’: events 31-33 | | 205 | read_table_value(yaml_parser_t *parser, int start_line, int is_display) { | | ^~~~~~~~~~~~~~~~ | | | | | (31) entry to ‘read_table_value’ | 206 | table_value *table; | 207 | char *table_name = malloc(sizeof(char) * MAXSTRING); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (32) this call could return NULL |...... | 210 | table_name[0] = '\0'; | | ~~~~~~~~~~~~~~~~~~~~ | | | | | (33) ‘table_name’ could be NULL: unchecked value from (32) | lou_checkyaml.c:278:21: warning: dereference of possibly-NULL ‘table’ [CWE-690] [-Wanalyzer-possible-null-dereference] 278 | table->name = table_name; | ~~~~~~~~~~~~^~~~~~~~~~~~ ‘main’: events 1-9 | | 968 | main(int argc, char *argv[]) { | | ^~~~ | | | | | (1) entry to ‘main’ |...... | 973 | while ((optc = getopt_long(argc, argv, "hv", longopts, NULL)) != -1) switch (optc) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) following ‘false’ branch (when ‘optc == -1’)... |...... | 990 | if (optind != argc - 1) { | | ~ ~~~~~~~~ | | | | | | | (3) ...to here | | (4) following ‘false’ branch... |...... | 1021 | file_name = argv[1]; | | ~~~~~~~~~~~~~~~~~~~ | | | | | (5) ...to here | 1022 | file = fopen(file_name, "rb"); | 1023 | if (!file) { | | ~ | | | | | (6) following ‘false’ branch (when ‘file’ is non-NULL)... |...... | 1028 | char *dir_name = strdup(file_name); | | ~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here |...... | 1041 | if (i > 0) | | ~ | | | | | (8) following ‘false’ branch (when ‘i <= 0’)... |...... | 1044 | free(dir_name); | | ~~~~~~~~~~~~~~ | | | | | (9) ...to here | ‘main’: event 10 | | 1049 | assert(yaml_parser_initialize(&parser)); | | ^~~~~~ | | | | | (10) following ‘true’ branch... | ‘main’: events 11-28 | | 1051 | yaml_parser_set_input_file(&parser, file); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (11) ...to here | 1052 | | 1053 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_STREAM_START_EVENT)) { | | ~ | | | | | (12) following ‘false’ branch... |...... | 1057 | if (event.data.stream_start.encoding != YAML_UTF8_ENCODING) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (13) ...to here | | (14) following ‘false’ branch... |...... | 1061 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (15) ...to here | 1062 | | 1063 | if (!yaml_parser_parse(&parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (16) following ‘false’ branch... (18) following ‘false’ branch... | 1064 | (event.type != YAML_DOCUMENT_START_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (17) ...to here |...... | 1067 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (19) ...to here | 1068 | | 1069 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_MAPPING_START_EVENT)) { | | ~ | | | | | (20) following ‘false’ branch... |...... | 1072 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (21) ...to here | 1073 | | 1074 | if (!yaml_parser_parse(&parser, &event)) | | ~ | | | | | (22) following ‘false’ branch... |...... | 1078 | char *tables[MAXTABLES + 1]; | | ~~~~ | | | | | (23) ...to here |...... | 1081 | if (event.type == YAML_SCALAR_EVENT && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (24) following ‘true’ branch... (26) following ‘true’ branch (when the strings are equal)... | 1082 | !strcmp((const char *)event.data.scalar.value, "display")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (25) ...to here | 1083 | table_value *v; | 1084 | free(display_table); | | ~~~~~~~~~~~~~~~~~~~ | | | | | (27) ...to here | 1085 | v = read_table_value(&parser, event.start_mark.line + 1, 1); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (28) calling ‘read_table_value’ from ‘main’ | +--> ‘read_table_value’: events 29-39 | | 205 | read_table_value(yaml_parser_t *parser, int start_line, int is_display) { | | ^~~~~~~~~~~~~~~~ | | | | | (29) entry to ‘read_table_value’ |...... | 211 | if (!yaml_parser_parse(parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (30) following ‘false’ branch... (32) following ‘false’ branch... | 212 | !(event.type == YAML_SEQUENCE_START_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (31) ...to here | 213 | event.type == YAML_SCALAR_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 214 | event.type == YAML_MAPPING_START_EVENT)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |...... | 219 | if (event.type == YAML_SEQUENCE_START_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (33) ...to here | | (34) following ‘false’ branch... |...... | 236 | } else if (event.type == YAML_SCALAR_EVENT) { | | ~ | | | | | (35) ...to here | | (36) following ‘true’ branch... | 237 | yaml_char_t *p = event.data.scalar.value; | | ~ | | | | | (37) ...to here |...... | 240 | if (*p == 10 || *p == 13) { | | ~ | | | | | (38) following ‘false’ branch... |...... | 247 | strcat(table_name, (const char *)event.data.scalar.value); | | ~ | | | | | (39) inlined call to ‘strcat’ from ‘read_table_value’ | +--> ‘strcat’: event 40 | |/usr/include/bits/string_fortified.h:130:10: | 130 | return __builtin___strcat_chk (__dest, __src, __glibc_objsize (__dest)); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (40) ...to here | <------+ | ‘read_table_value’: events 41-42 | |lou_checkyaml.c:277:17: | 277 | table = malloc(sizeof(table_value)); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (41) this call could return NULL | 278 | table->name = table_name; | | ~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (42) ‘table’ could be NULL: unchecked value from (41) | lou_checkyaml.c: In function ‘read_inPos’: lou_checkyaml.c:516:26: warning: dereference of possibly-NULL ‘pos’ [CWE-690] [-Wanalyzer-possible-null-dereference] 516 | pos[i++] = parse_number((const char *)event.data.scalar.value, "input position", | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 517 | event.start_mark.line + 1); | ~~~~~~~~~~~~~~~~~~~~~~~~~~ ‘main’: events 1-9 | | 968 | main(int argc, char *argv[]) { | | ^~~~ | | | | | (1) entry to ‘main’ |...... | 973 | while ((optc = getopt_long(argc, argv, "hv", longopts, NULL)) != -1) switch (optc) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) following ‘false’ branch (when ‘optc == -1’)... |...... | 990 | if (optind != argc - 1) { | | ~ ~~~~~~~~ | | | | | | | (3) ...to here | | (4) following ‘false’ branch... |...... | 1021 | file_name = argv[1]; | | ~~~~~~~~~~~~~~~~~~~ | | | | | (5) ...to here | 1022 | file = fopen(file_name, "rb"); | 1023 | if (!file) { | | ~ | | | | | (6) following ‘false’ branch (when ‘file’ is non-NULL)... |...... | 1028 | char *dir_name = strdup(file_name); | | ~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here |...... | 1041 | if (i > 0) | | ~ | | | | | (8) following ‘false’ branch (when ‘i <= 0’)... |...... | 1044 | free(dir_name); | | ~~~~~~~~~~~~~~ | | | | | (9) ...to here | ‘main’: event 10 | | 1049 | assert(yaml_parser_initialize(&parser)); | | ^~~~~~ | | | | | (10) following ‘true’ branch... | ‘main’: events 11-26 | | 1051 | yaml_parser_set_input_file(&parser, file); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (11) ...to here | 1052 | | 1053 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_STREAM_START_EVENT)) { | | ~ | | | | | (12) following ‘false’ branch... |...... | 1057 | if (event.data.stream_start.encoding != YAML_UTF8_ENCODING) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (13) ...to here | | (14) following ‘false’ branch... |...... | 1061 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (15) ...to here | 1062 | | 1063 | if (!yaml_parser_parse(&parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (16) following ‘false’ branch... (18) following ‘false’ branch... | 1064 | (event.type != YAML_DOCUMENT_START_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (17) ...to here |...... | 1067 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (19) ...to here | 1068 | | 1069 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_MAPPING_START_EVENT)) { | | ~ | | | | | (20) following ‘false’ branch... |...... | 1072 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (21) ...to here | 1073 | | 1074 | if (!yaml_parser_parse(&parser, &event)) | | ~ | | | | | (22) following ‘false’ branch... |...... | 1078 | char *tables[MAXTABLES + 1]; | | ~~~~ | | | | | (23) ...to here |...... | 1081 | if (event.type == YAML_SCALAR_EVENT && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (24) following ‘false’ branch (when the strings are non-equal)... | 1082 | !strcmp((const char *)event.data.scalar.value, "display")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |...... | 1097 | if (!(tables[0] = read_table(&event, &parser, display_table))) break; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (25) ...to here | | (26) calling ‘read_table’ from ‘main’ | +--> ‘read_table’: events 27-32 | | 295 | read_table(yaml_event_t *start_event, yaml_parser_t *parser, const char *display_table) { | | ^~~~~~~~~~ | | | | | (27) entry to ‘read_table’ |...... | 298 | if (start_event->type != YAML_SCALAR_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (28) following ‘false’ branch... (30) following ‘false’ branch (when the strings are equal)... | 299 | strcmp((const char *)start_event->data.scalar.value, "table")) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (29) ...to here | 300 | return 0; | 301 | v = read_table_value(parser, start_event->start_mark.line + 1, 0); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (31) ...to here | | (32) calling ‘read_table_value’ from ‘read_table’ | +--> ‘read_table_value’: events 33-42 | | 205 | read_table_value(yaml_parser_t *parser, int start_line, int is_display) { | | ^~~~~~~~~~~~~~~~ | | | | | (33) entry to ‘read_table_value’ |...... | 211 | if (!yaml_parser_parse(parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (34) following ‘false’ branch... (36) following ‘false’ branch... | 212 | !(event.type == YAML_SEQUENCE_START_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (35) ...to here | 213 | event.type == YAML_SCALAR_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 214 | event.type == YAML_MAPPING_START_EVENT)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |...... | 219 | if (event.type == YAML_SEQUENCE_START_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (37) ...to here | | (38) following ‘false’ branch... |...... | 236 | } else if (event.type == YAML_SCALAR_EVENT) { | | ~ | | | | | (39) ...to here | | (40) following ‘false’ branch... |...... | 252 | const char *table_file_name_check = NULL; | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (41) ...to here | 253 | yaml_event_delete(&event); | 254 | query = read_table_query(parser, &table_file_name_check); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (42) calling ‘read_table_query’ from ‘read_table_value’ | +--> ‘read_table_query’: events 43-47 | | 136 | read_table_query(yaml_parser_t *parser, const char **table_file_name_check) { | | ^~~~~~~~~~~~~~~~ | | | | | (43) entry to ‘read_table_query’ |...... | 142 | if (!yaml_parser_parse(parser, &event)) yaml_error(YAML_SCALAR_EVENT, &event); | | ~ | | | | | (44) following ‘false’ branch... | 143 | if (event.type == YAML_SCALAR_EVENT) { | | ~~~~~~~~~~ | | | | | (45) ...to here |...... | 167 | } else if (event.type == YAML_MAPPING_END_EVENT) { | | ~ | | | | | (46) following ‘true’ branch... | 168 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (47) ...to here | <------+ | ‘read_table_value’: events 48-51 | | 254 | query = read_table_query(parser, &table_file_name_check); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (48) returning to ‘read_table_value’ from ‘read_table_query’ |...... | 258 | if (!table_name) | | ~ | | | | | (49) following ‘false’ branch (when ‘table_name’ is non-NULL)... |...... | 261 | if (table_file_name_check) { | | ~~~~~~~~~~~~~~~~~~~~~~ | | || | | |(50) ...to here | | (51) following ‘false’ branch... | ‘read_table_value’: event 52 | |cc1: | (52): ...to here | <------+ | ‘read_table’: events 53-62 | | 301 | v = read_table_value(parser, start_event->start_mark.line + 1, 0); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (53) returning to ‘read_table’ from ‘read_table_value’ | 302 | if (v->content) | | ~ | | | | | (54) following ‘false’ branch... | 303 | compile_inline_table(v); | 304 | else if (!_lou_getTranslationTable(v->name)) | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (55) ...to here | | (56) following ‘false’ branch... |...... | 307 | free(emph_classes); | | ~~~~~~~~~~~~~~~~~~ | | | | | (57) ...to here |...... | 310 | if (!display_table) { | | ~ | | | | | (58) following ‘true’ branch (when ‘display_table’ is NULL)... | 311 | if (v->content) { | | ~~~~~~~~~~~ | | | | | | | (59) ...to here | | (60) following ‘false’ branch... |...... | 314 | } else if (!_lou_getDisplayTable(v->name)) | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (61) ...to here | | (62) following ‘false’ branch... | ‘read_table’: event 63 | |cc1: | (63): ...to here | ‘read_table’: event 64 | | 318 | free_table_value(v); | | ^ | | | | | (64) inlined call to ‘free_table_value’ from ‘read_table’ | +--> ‘free_table_value’: event 65 | |cc1: | (65): calling ‘free_table_value.part.0’ from ‘read_table’ | ‘free_table_value.part.0’: events 66-68 | | 286 | free_table_value(table_value *table) { | | ^~~~~~~~~~~~~~~~ | | | | | (66) entry to ‘free_table_value.part.0’ |...... | 289 | if (table->content) free((char *)table->content); | | ~ | | | | | (67) following ‘false’ branch... | 290 | free(table); | | ~~~~~~~~~~~ | | | | | (68) ...to here | <------+ | ‘read_table’: event 69 | | 318 | free_table_value(v); | | ^ | | | | | (69) inlined call to ‘free_table_value’ from ‘read_table’ | +--> ‘free_table_value’: event 70 | |cc1: | (70): returning to ‘read_table’ from ‘free_table_value.part.0’ | <-------------+ | ‘main’: events 71-78 | | 1097 | if (!(tables[0] = read_table(&event, &parser, display_table))) break; | | ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (71) returning to ‘main’ from ‘read_table’ | | (72) following ‘false’ branch... | 1098 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (73) ...to here |...... | 1101 | if (!yaml_parser_parse(&parser, &event)) | | ~ | | | | | (74) following ‘false’ branch... |...... | 1105 | if ((tables[k++] = read_table(&event, &parser, display_table))) { | | ~ ~~~ | | | | | | | (75) ...to here | | (76) following ‘false’ branch... |...... | 1114 | if (event.type != YAML_SCALAR_EVENT) yaml_error(YAML_SCALAR_EVENT, &event); | | ~~~~~~~~~~~ | | | | | | | (77) ...to here | | (78) following ‘false’ branch... | ‘main’: event 79 | |cc1: | (79): ...to here | ‘main’: events 80-82 | | 1119 | if (!strcmp((const char *)event.data.scalar.value, "flags")) { | | ^ | | | | | (80) following ‘true’ branch (when the strings are equal)... | 1120 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (81) ...to here | 1121 | read_flags(&parser, &testmode); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (82) calling ‘read_flags’ from ‘main’ | +--> ‘read_flags’: events 83-89 | | 323 | read_flags(yaml_parser_t *parser, int *testmode) { | | ^~~~~~~~~~ | | | | | (83) entry to ‘read_flags’ |...... | 329 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_MAPPING_START_EVENT)) | | ~ | | | | | (84) following ‘false’ branch... |...... | 332 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (85) ...to here |...... | 363 | if (!parse_error) yaml_parse_error(parser); | | ~ | | | | | (86) following ‘false’ branch (when ‘parse_error != 0’)... | 364 | if (event.type != YAML_MAPPING_END_EVENT) yaml_error(YAML_MAPPING_END_EVENT, &event); | | ~~~~~~~~~~~ | | | | | | | (87) ...to here | | (88) following ‘false’ branch... | 365 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (89) ...to here | <------+ | ‘main’: events 90-97 | | 1121 | read_flags(&parser, &testmode); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (90) returning to ‘main’ from ‘read_flags’ | 1122 | | 1123 | if (!yaml_parser_parse(&parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (91) following ‘false’ branch... (93) following ‘false’ branch... | 1124 | (event.type != YAML_SCALAR_EVENT) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (92) ...to here (95) following ‘false’ branch (when the strings are equal)... | 1125 | strcmp((const char *)event.data.scalar.value, "tests")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (94) ...to here |...... | 1128 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (96) ...to here | 1129 | read_tests(&parser, tables, display_table, testmode); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (97) calling ‘read_tests’ from ‘main’ | +--> ‘read_tests’: events 98-107 | | 915 | read_tests( | | ^~~~~~~~~~ | | | | | (98) entry to ‘read_tests’ |...... | 918 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SEQUENCE_START_EVENT)) | | ~ | | | | | (99) following ‘false’ branch... |...... | 921 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (100) ...to here |...... | 925 | if (!yaml_parser_parse(parser, &event)) { | | ~ | | | | | (101) following ‘false’ branch... |...... | 928 | if (event.type == YAML_SEQUENCE_END_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (102) ...to here | | (103) following ‘false’ branch... |...... | 931 | } else if (event.type == YAML_SEQUENCE_START_EVENT) { | | ~ | | | | | (104) ...to here | | (105) following ‘true’ branch... | 932 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (106) ...to here | 933 | read_test(parser, tables, display_table, testmode); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (107) calling ‘read_test’ from ‘read_tests’ | +--> ‘read_test’: events 108-119 | | 814 | read_test(yaml_parser_t *parser, char **tables, const char *display_table, int testmode) { | | ^~~~~~~~~ | | | | | (108) entry to ‘read_test’ |...... | 829 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SCALAR_EVENT)) | | ~ | | | | | (109) following ‘false’ branch... |...... | 832 | word = strndup((const char *)event.data.scalar.value, event.data.scalar.length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (110) ...to here |...... | 835 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SCALAR_EVENT)) | | ~ | | | | | (111) following ‘false’ branch... |...... | 839 | strndup((const char *)event.data.scalar.value, event.data.scalar.length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (112) ...to here |...... | 842 | if (!yaml_parser_parse(parser, &event)) yaml_parse_error(parser); | | ~ | | | | | (113) following ‘false’ branch... |...... | 845 | if (event.type == YAML_SCALAR_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (114) ...to here | | (115) following ‘false’ branch... |...... | 855 | if (event.type == YAML_MAPPING_START_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (116) ...to here | | (117) following ‘true’ branch... | 856 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (118) ...to here | 857 | read_options(parser, testmode, parsed_strlen(word), parsed_strlen(translation), | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (119) calling ‘read_options’ from ‘read_test’ | 858 | &xfail, &mode, &typeform, &inPos, &outPos, &cursorPos, &cursorOutPos, | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 859 | &maxOutputLen, &realInputLen); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘read_options’: events 120-133 | | 679 | read_options(yaml_parser_t *parser, int testmode, int wordLen, int translationLen, | | ^~~~~~~~~~~~ | | | | | (120) entry to ‘read_options’ |...... | 693 | while ((parse_error = yaml_parser_parse(parser, &event)) && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (121) following ‘true’ branch (when ‘parse_error != 0’)... | | (123) following ‘true’ branch... | 694 | (event.type == YAML_SCALAR_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (122) ...to here | 695 | option_name = | 696 | strndup((const char *)event.data.scalar.value, event.data.scalar.length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (124) ...to here | 697 | | 698 | if (!strcmp(option_name, "xfail")) { | | ~ | | | | | (125) following ‘false’ branch (when the strings are non-equal)... |...... | 701 | } else if (!strcmp(option_name, "mode")) { | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (126) ...to here | | (127) following ‘false’ branch (when the strings are non-equal)... |...... | 704 | } else if (!strcmp(option_name, "typeform")) { | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (128) ...to here | | (129) following ‘false’ branch (when the strings are non-equal)... |...... | 711 | } else if (!strcmp(option_name, "inputPos")) { | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (130) ...to here | | (131) following ‘true’ branch (when the strings are equal)... | 712 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (132) ...to here | 713 | *inPos = read_inPos(parser, translationLen); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (133) calling ‘read_inPos’ from ‘read_options’ | +--> ‘read_inPos’: events 134-144 | | 500 | read_inPos(yaml_parser_t *parser, int translen) { | | ^~~~~~~~~~ | | | | | (134) entry to ‘read_inPos’ | 501 | int *pos = malloc(sizeof(int) * translen); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (135) this call could return NULL |...... | 506 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SEQUENCE_START_EVENT)) | | ~ | | | | | (136) following ‘false’ branch... | 507 | yaml_error(YAML_SEQUENCE_START_EVENT, &event); | 508 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (137) ...to here | 509 | | 510 | while ((parse_error = yaml_parser_parse(parser, &event)) && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (138) following ‘true’ branch (when ‘parse_error != 0’)... | | (140) following ‘true’ branch... | 511 | (event.type == YAML_SCALAR_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (139) ...to here | 512 | if (i >= translen) | | ~ | | | | | (141) ...to here | | (142) following ‘false’ branch (when ‘i < translen’)... |...... | 516 | pos[i++] = parse_number((const char *)event.data.scalar.value, "input position", | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (144) calling ‘parse_number’ from ‘read_inPos’ | 517 | event.start_mark.line + 1); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (143) ...to here | +--> ‘parse_number’: events 145-149 | | 485 | parse_number(const char *number, const char *name, int file_line) { | | ^~~~~~~~~~~~ | | | | | (145) entry to ‘parse_number’ |...... | 490 | if (errno != 0) | | ~ | | | | | (146) following ‘false’ branch... |...... | 493 | if (number == tail) | | ~~~~~~~~~~~~~~~ | | | | | | | (147) ...to here | | (148) following ‘false’ branch... |...... | 496 | return val; | | ~~~ | | | | | (149) ...to here | <------+ | ‘read_inPos’: events 150-151 | | 516 | pos[i++] = parse_number((const char *)event.data.scalar.value, "input position", | | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (150) returning to ‘read_inPos’ from ‘parse_number’ | | (151) ‘pos + (long unsigned int)i * 4’ could be NULL: unchecked value from (135) | 517 | event.start_mark.line + 1); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | lou_checkyaml.c: In function ‘read_outPos’: lou_checkyaml.c:548:26: warning: dereference of possibly-NULL ‘pos’ [CWE-690] [-Wanalyzer-possible-null-dereference] 548 | pos[i++] = parse_number((const char *)event.data.scalar.value, "output position", | ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 549 | event.start_mark.line + 1); | ~~~~~~~~~~~~~~~~~~~~~~~~~~ ‘main’: events 1-9 | | 968 | main(int argc, char *argv[]) { | | ^~~~ | | | | | (1) entry to ‘main’ |...... | 973 | while ((optc = getopt_long(argc, argv, "hv", longopts, NULL)) != -1) switch (optc) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) following ‘false’ branch (when ‘optc == -1’)... |...... | 990 | if (optind != argc - 1) { | | ~ ~~~~~~~~ | | | | | | | (3) ...to here | | (4) following ‘false’ branch... |...... | 1021 | file_name = argv[1]; | | ~~~~~~~~~~~~~~~~~~~ | | | | | (5) ...to here | 1022 | file = fopen(file_name, "rb"); | 1023 | if (!file) { | | ~ | | | | | (6) following ‘false’ branch (when ‘file’ is non-NULL)... |...... | 1028 | char *dir_name = strdup(file_name); | | ~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here |...... | 1041 | if (i > 0) | | ~ | | | | | (8) following ‘false’ branch (when ‘i <= 0’)... |...... | 1044 | free(dir_name); | | ~~~~~~~~~~~~~~ | | | | | (9) ...to here | ‘main’: event 10 | | 1049 | assert(yaml_parser_initialize(&parser)); | | ^~~~~~ | | | | | (10) following ‘true’ branch... | ‘main’: events 11-26 | | 1051 | yaml_parser_set_input_file(&parser, file); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (11) ...to here | 1052 | | 1053 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_STREAM_START_EVENT)) { | | ~ | | | | | (12) following ‘false’ branch... |...... | 1057 | if (event.data.stream_start.encoding != YAML_UTF8_ENCODING) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (13) ...to here | | (14) following ‘false’ branch... |...... | 1061 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (15) ...to here | 1062 | | 1063 | if (!yaml_parser_parse(&parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (16) following ‘false’ branch... (18) following ‘false’ branch... | 1064 | (event.type != YAML_DOCUMENT_START_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (17) ...to here |...... | 1067 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (19) ...to here | 1068 | | 1069 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_MAPPING_START_EVENT)) { | | ~ | | | | | (20) following ‘false’ branch... |...... | 1072 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (21) ...to here | 1073 | | 1074 | if (!yaml_parser_parse(&parser, &event)) | | ~ | | | | | (22) following ‘false’ branch... |...... | 1078 | char *tables[MAXTABLES + 1]; | | ~~~~ | | | | | (23) ...to here |...... | 1081 | if (event.type == YAML_SCALAR_EVENT && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (24) following ‘false’ branch (when the strings are non-equal)... | 1082 | !strcmp((const char *)event.data.scalar.value, "display")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |...... | 1097 | if (!(tables[0] = read_table(&event, &parser, display_table))) break; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (25) ...to here | | (26) calling ‘read_table’ from ‘main’ | +--> ‘read_table’: events 27-32 | | 295 | read_table(yaml_event_t *start_event, yaml_parser_t *parser, const char *display_table) { | | ^~~~~~~~~~ | | | | | (27) entry to ‘read_table’ |...... | 298 | if (start_event->type != YAML_SCALAR_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (28) following ‘false’ branch... (30) following ‘false’ branch (when the strings are equal)... | 299 | strcmp((const char *)start_event->data.scalar.value, "table")) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (29) ...to here | 300 | return 0; | 301 | v = read_table_value(parser, start_event->start_mark.line + 1, 0); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (31) ...to here | | (32) calling ‘read_table_value’ from ‘read_table’ | +--> ‘read_table_value’: events 33-42 | | 205 | read_table_value(yaml_parser_t *parser, int start_line, int is_display) { | | ^~~~~~~~~~~~~~~~ | | | | | (33) entry to ‘read_table_value’ |...... | 211 | if (!yaml_parser_parse(parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (34) following ‘false’ branch... (36) following ‘false’ branch... | 212 | !(event.type == YAML_SEQUENCE_START_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (35) ...to here | 213 | event.type == YAML_SCALAR_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 214 | event.type == YAML_MAPPING_START_EVENT)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |...... | 219 | if (event.type == YAML_SEQUENCE_START_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (37) ...to here | | (38) following ‘false’ branch... |...... | 236 | } else if (event.type == YAML_SCALAR_EVENT) { | | ~ | | | | | (39) ...to here | | (40) following ‘false’ branch... |...... | 252 | const char *table_file_name_check = NULL; | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (41) ...to here | 253 | yaml_event_delete(&event); | 254 | query = read_table_query(parser, &table_file_name_check); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (42) calling ‘read_table_query’ from ‘read_table_value’ | +--> ‘read_table_query’: events 43-47 | | 136 | read_table_query(yaml_parser_t *parser, const char **table_file_name_check) { | | ^~~~~~~~~~~~~~~~ | | | | | (43) entry to ‘read_table_query’ |...... | 142 | if (!yaml_parser_parse(parser, &event)) yaml_error(YAML_SCALAR_EVENT, &event); | | ~ | | | | | (44) following ‘false’ branch... | 143 | if (event.type == YAML_SCALAR_EVENT) { | | ~~~~~~~~~~ | | | | | (45) ...to here |...... | 167 | } else if (event.type == YAML_MAPPING_END_EVENT) { | | ~ | | | | | (46) following ‘true’ branch... | 168 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (47) ...to here | <------+ | ‘read_table_value’: events 48-51 | | 254 | query = read_table_query(parser, &table_file_name_check); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (48) returning to ‘read_table_value’ from ‘read_table_query’ |...... | 258 | if (!table_name) | | ~ | | | | | (49) following ‘false’ branch (when ‘table_name’ is non-NULL)... |...... | 261 | if (table_file_name_check) { | | ~~~~~~~~~~~~~~~~~~~~~~ | | || | | |(50) ...to here | | (51) following ‘false’ branch... | ‘read_table_value’: event 52 | |cc1: | (52): ...to here | <------+ | ‘read_table’: events 53-62 | | 301 | v = read_table_value(parser, start_event->start_mark.line + 1, 0); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (53) returning to ‘read_table’ from ‘read_table_value’ | 302 | if (v->content) | | ~ | | | | | (54) following ‘false’ branch... | 303 | compile_inline_table(v); | 304 | else if (!_lou_getTranslationTable(v->name)) | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (55) ...to here | | (56) following ‘false’ branch... |...... | 307 | free(emph_classes); | | ~~~~~~~~~~~~~~~~~~ | | | | | (57) ...to here |...... | 310 | if (!display_table) { | | ~ | | | | | (58) following ‘true’ branch (when ‘display_table’ is NULL)... | 311 | if (v->content) { | | ~~~~~~~~~~~ | | | | | | | (59) ...to here | | (60) following ‘false’ branch... |...... | 314 | } else if (!_lou_getDisplayTable(v->name)) | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (61) ...to here | | (62) following ‘false’ branch... | ‘read_table’: event 63 | |cc1: | (63): ...to here | ‘read_table’: event 64 | | 318 | free_table_value(v); | | ^ | | | | | (64) inlined call to ‘free_table_value’ from ‘read_table’ | +--> ‘free_table_value’: event 65 | |cc1: | (65): calling ‘free_table_value.part.0’ from ‘read_table’ | ‘free_table_value.part.0’: events 66-68 | | 286 | free_table_value(table_value *table) { | | ^~~~~~~~~~~~~~~~ | | | | | (66) entry to ‘free_table_value.part.0’ |...... | 289 | if (table->content) free((char *)table->content); | | ~ | | | | | (67) following ‘false’ branch... | 290 | free(table); | | ~~~~~~~~~~~ | | | | | (68) ...to here | <------+ | ‘read_table’: event 69 | | 318 | free_table_value(v); | | ^ | | | | | (69) inlined call to ‘free_table_value’ from ‘read_table’ | +--> ‘free_table_value’: event 70 | |cc1: | (70): returning to ‘read_table’ from ‘free_table_value.part.0’ | <-------------+ | ‘main’: events 71-78 | | 1097 | if (!(tables[0] = read_table(&event, &parser, display_table))) break; | | ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (71) returning to ‘main’ from ‘read_table’ | | (72) following ‘false’ branch... | 1098 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (73) ...to here |...... | 1101 | if (!yaml_parser_parse(&parser, &event)) | | ~ | | | | | (74) following ‘false’ branch... |...... | 1105 | if ((tables[k++] = read_table(&event, &parser, display_table))) { | | ~ ~~~ | | | | | | | (75) ...to here | | (76) following ‘false’ branch... |...... | 1114 | if (event.type != YAML_SCALAR_EVENT) yaml_error(YAML_SCALAR_EVENT, &event); | | ~~~~~~~~~~~ | | | | | | | (77) ...to here | | (78) following ‘false’ branch... | ‘main’: event 79 | |cc1: | (79): ...to here | ‘main’: events 80-82 | | 1119 | if (!strcmp((const char *)event.data.scalar.value, "flags")) { | | ^ | | | | | (80) following ‘true’ branch (when the strings are equal)... | 1120 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (81) ...to here | 1121 | read_flags(&parser, &testmode); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (82) calling ‘read_flags’ from ‘main’ | +--> ‘read_flags’: events 83-89 | | 323 | read_flags(yaml_parser_t *parser, int *testmode) { | | ^~~~~~~~~~ | | | | | (83) entry to ‘read_flags’ |...... | 329 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_MAPPING_START_EVENT)) | | ~ | | | | | (84) following ‘false’ branch... |...... | 332 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (85) ...to here |...... | 363 | if (!parse_error) yaml_parse_error(parser); | | ~ | | | | | (86) following ‘false’ branch (when ‘parse_error != 0’)... | 364 | if (event.type != YAML_MAPPING_END_EVENT) yaml_error(YAML_MAPPING_END_EVENT, &event); | | ~~~~~~~~~~~ | | | | | | | (87) ...to here | | (88) following ‘false’ branch... | 365 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (89) ...to here | <------+ | ‘main’: events 90-97 | | 1121 | read_flags(&parser, &testmode); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (90) returning to ‘main’ from ‘read_flags’ | 1122 | | 1123 | if (!yaml_parser_parse(&parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (91) following ‘false’ branch... (93) following ‘false’ branch... | 1124 | (event.type != YAML_SCALAR_EVENT) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (92) ...to here (95) following ‘false’ branch (when the strings are equal)... | 1125 | strcmp((const char *)event.data.scalar.value, "tests")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (94) ...to here |...... | 1128 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (96) ...to here | 1129 | read_tests(&parser, tables, display_table, testmode); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (97) calling ‘read_tests’ from ‘main’ | +--> ‘read_tests’: events 98-107 | | 915 | read_tests( | | ^~~~~~~~~~ | | | | | (98) entry to ‘read_tests’ |...... | 918 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SEQUENCE_START_EVENT)) | | ~ | | | | | (99) following ‘false’ branch... |...... | 921 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (100) ...to here |...... | 925 | if (!yaml_parser_parse(parser, &event)) { | | ~ | | | | | (101) following ‘false’ branch... |...... | 928 | if (event.type == YAML_SEQUENCE_END_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (102) ...to here | | (103) following ‘false’ branch... |...... | 931 | } else if (event.type == YAML_SEQUENCE_START_EVENT) { | | ~ | | | | | (104) ...to here | | (105) following ‘true’ branch... | 932 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (106) ...to here | 933 | read_test(parser, tables, display_table, testmode); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (107) calling ‘read_test’ from ‘read_tests’ | +--> ‘read_test’: events 108-119 | | 814 | read_test(yaml_parser_t *parser, char **tables, const char *display_table, int testmode) { | | ^~~~~~~~~ | | | | | (108) entry to ‘read_test’ |...... | 829 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SCALAR_EVENT)) | | ~ | | | | | (109) following ‘false’ branch... |...... | 832 | word = strndup((const char *)event.data.scalar.value, event.data.scalar.length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (110) ...to here |...... | 835 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SCALAR_EVENT)) | | ~ | | | | | (111) following ‘false’ branch... |...... | 839 | strndup((const char *)event.data.scalar.value, event.data.scalar.length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (112) ...to here |...... | 842 | if (!yaml_parser_parse(parser, &event)) yaml_parse_error(parser); | | ~ | | | | | (113) following ‘false’ branch... |...... | 845 | if (event.type == YAML_SCALAR_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (114) ...to here | | (115) following ‘false’ branch... |...... | 855 | if (event.type == YAML_MAPPING_START_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (116) ...to here | | (117) following ‘true’ branch... | 856 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (118) ...to here | 857 | read_options(parser, testmode, parsed_strlen(word), parsed_strlen(translation), | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (119) calling ‘read_options’ from ‘read_test’ | 858 | &xfail, &mode, &typeform, &inPos, &outPos, &cursorPos, &cursorOutPos, | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 859 | &maxOutputLen, &realInputLen); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘read_options’: events 120-135 | | 679 | read_options(yaml_parser_t *parser, int testmode, int wordLen, int translationLen, | | ^~~~~~~~~~~~ | | | | | (120) entry to ‘read_options’ |...... | 693 | while ((parse_error = yaml_parser_parse(parser, &event)) && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (121) following ‘true’ branch (when ‘parse_error != 0’)... | | (123) following ‘true’ branch... | 694 | (event.type == YAML_SCALAR_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (122) ...to here | 695 | option_name = | 696 | strndup((const char *)event.data.scalar.value, event.data.scalar.length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (124) ...to here | 697 | | 698 | if (!strcmp(option_name, "xfail")) { | | ~ | | | | | (125) following ‘false’ branch (when the strings are non-equal)... |...... | 701 | } else if (!strcmp(option_name, "mode")) { | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (126) ...to here | | (127) following ‘false’ branch (when the strings are non-equal)... |...... | 704 | } else if (!strcmp(option_name, "typeform")) { | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (128) ...to here | | (129) following ‘false’ branch (when the strings are non-equal)... |...... | 711 | } else if (!strcmp(option_name, "inputPos")) { | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (130) ...to here | | (131) following ‘false’ branch (when the strings are non-equal)... |...... | 714 | } else if (!strcmp(option_name, "outputPos")) { | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (132) ...to here | | (133) following ‘true’ branch (when the strings are equal)... | 715 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (134) ...to here | 716 | *outPos = read_outPos(parser, wordLen, translationLen); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (135) calling ‘read_outPos’ from ‘read_options’ | +--> ‘read_outPos’: events 136-146 | | 532 | read_outPos(yaml_parser_t *parser, int wrdlen, int translen) { | | ^~~~~~~~~~~ | | | | | (136) entry to ‘read_outPos’ | 533 | int *pos = malloc(sizeof(int) * wrdlen); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (137) this call could return NULL |...... | 538 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SEQUENCE_START_EVENT)) | | ~ | | | | | (138) following ‘false’ branch... | 539 | yaml_error(YAML_SEQUENCE_START_EVENT, &event); | 540 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (139) ...to here | 541 | | 542 | while ((parse_error = yaml_parser_parse(parser, &event)) && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (140) following ‘true’ branch (when ‘parse_error != 0’)... | | (142) following ‘true’ branch... | 543 | (event.type == YAML_SCALAR_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (141) ...to here | 544 | if (i >= wrdlen) | | ~ | | | | | (143) ...to here | | (144) following ‘false’ branch (when ‘i < wrdlen’)... |...... | 548 | pos[i++] = parse_number((const char *)event.data.scalar.value, "output position", | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (146) calling ‘parse_number’ from ‘read_outPos’ | 549 | event.start_mark.line + 1); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (145) ...to here | +--> ‘parse_number’: events 147-151 | | 485 | parse_number(const char *number, const char *name, int file_line) { | | ^~~~~~~~~~~~ | | | | | (147) entry to ‘parse_number’ |...... | 490 | if (errno != 0) | | ~ | | | | | (148) following ‘false’ branch... |...... | 493 | if (number == tail) | | ~~~~~~~~~~~~~~~ | | | | | | | (149) ...to here | | (150) following ‘false’ branch... |...... | 496 | return val; | | ~~~ | | | | | (151) ...to here | <------+ | ‘read_outPos’: events 152-153 | | 548 | pos[i++] = parse_number((const char *)event.data.scalar.value, "output position", | | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (152) returning to ‘read_outPos’ from ‘parse_number’ | | (153) ‘pos + (long unsigned int)i * 4’ could be NULL: unchecked value from (137) | 549 | event.start_mark.line + 1); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | lou_checkyaml.c: In function ‘read_options’: lou_checkyaml.c:698:22: warning: use of possibly-NULL ‘option_name’ where non-null expected [CWE-690] [-Wanalyzer-possible-null-argument] 698 | if (!strcmp(option_name, "xfail")) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ‘main’: events 1-9 | | 968 | main(int argc, char *argv[]) { | | ^~~~ | | | | | (1) entry to ‘main’ |...... | 973 | while ((optc = getopt_long(argc, argv, "hv", longopts, NULL)) != -1) switch (optc) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (2) following ‘false’ branch (when ‘optc == -1’)... |...... | 990 | if (optind != argc - 1) { | | ~ ~~~~~~~~ | | | | | | | (3) ...to here | | (4) following ‘false’ branch... |...... | 1021 | file_name = argv[1]; | | ~~~~~~~~~~~~~~~~~~~ | | | | | (5) ...to here | 1022 | file = fopen(file_name, "rb"); | 1023 | if (!file) { | | ~ | | | | | (6) following ‘false’ branch (when ‘file’ is non-NULL)... |...... | 1028 | char *dir_name = strdup(file_name); | | ~~~~~~~~~~~~~~~~~ | | | | | (7) ...to here |...... | 1041 | if (i > 0) | | ~ | | | | | (8) following ‘false’ branch (when ‘i <= 0’)... |...... | 1044 | free(dir_name); | | ~~~~~~~~~~~~~~ | | | | | (9) ...to here | ‘main’: event 10 | | 1049 | assert(yaml_parser_initialize(&parser)); | | ^~~~~~ | | | | | (10) following ‘true’ branch... | ‘main’: events 11-26 | | 1051 | yaml_parser_set_input_file(&parser, file); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (11) ...to here | 1052 | | 1053 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_STREAM_START_EVENT)) { | | ~ | | | | | (12) following ‘false’ branch... |...... | 1057 | if (event.data.stream_start.encoding != YAML_UTF8_ENCODING) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (13) ...to here | | (14) following ‘false’ branch... |...... | 1061 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (15) ...to here | 1062 | | 1063 | if (!yaml_parser_parse(&parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (16) following ‘false’ branch... (18) following ‘false’ branch... | 1064 | (event.type != YAML_DOCUMENT_START_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (17) ...to here |...... | 1067 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (19) ...to here | 1068 | | 1069 | if (!yaml_parser_parse(&parser, &event) || (event.type != YAML_MAPPING_START_EVENT)) { | | ~ | | | | | (20) following ‘false’ branch... |...... | 1072 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (21) ...to here | 1073 | | 1074 | if (!yaml_parser_parse(&parser, &event)) | | ~ | | | | | (22) following ‘false’ branch... |...... | 1078 | char *tables[MAXTABLES + 1]; | | ~~~~ | | | | | (23) ...to here |...... | 1081 | if (event.type == YAML_SCALAR_EVENT && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (24) following ‘false’ branch (when the strings are non-equal)... | 1082 | !strcmp((const char *)event.data.scalar.value, "display")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |...... | 1097 | if (!(tables[0] = read_table(&event, &parser, display_table))) break; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (25) ...to here | | (26) calling ‘read_table’ from ‘main’ | +--> ‘read_table’: events 27-32 | | 295 | read_table(yaml_event_t *start_event, yaml_parser_t *parser, const char *display_table) { | | ^~~~~~~~~~ | | | | | (27) entry to ‘read_table’ |...... | 298 | if (start_event->type != YAML_SCALAR_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (28) following ‘false’ branch... (30) following ‘false’ branch (when the strings are equal)... | 299 | strcmp((const char *)start_event->data.scalar.value, "table")) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (29) ...to here | 300 | return 0; | 301 | v = read_table_value(parser, start_event->start_mark.line + 1, 0); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (31) ...to here | | (32) calling ‘read_table_value’ from ‘read_table’ | +--> ‘read_table_value’: events 33-42 | | 205 | read_table_value(yaml_parser_t *parser, int start_line, int is_display) { | | ^~~~~~~~~~~~~~~~ | | | | | (33) entry to ‘read_table_value’ |...... | 211 | if (!yaml_parser_parse(parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (34) following ‘false’ branch... (36) following ‘false’ branch... | 212 | !(event.type == YAML_SEQUENCE_START_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (35) ...to here | 213 | event.type == YAML_SCALAR_EVENT || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 214 | event.type == YAML_MAPPING_START_EVENT)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |...... | 219 | if (event.type == YAML_SEQUENCE_START_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (37) ...to here | | (38) following ‘false’ branch... |...... | 236 | } else if (event.type == YAML_SCALAR_EVENT) { | | ~ | | | | | (39) ...to here | | (40) following ‘false’ branch... |...... | 252 | const char *table_file_name_check = NULL; | | ~~~~~~~~~~~~~~~~~~~~~ | | | | | (41) ...to here | 253 | yaml_event_delete(&event); | 254 | query = read_table_query(parser, &table_file_name_check); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (42) calling ‘read_table_query’ from ‘read_table_value’ | +--> ‘read_table_query’: events 43-47 | | 136 | read_table_query(yaml_parser_t *parser, const char **table_file_name_check) { | | ^~~~~~~~~~~~~~~~ | | | | | (43) entry to ‘read_table_query’ |...... | 142 | if (!yaml_parser_parse(parser, &event)) yaml_error(YAML_SCALAR_EVENT, &event); | | ~ | | | | | (44) following ‘false’ branch... | 143 | if (event.type == YAML_SCALAR_EVENT) { | | ~~~~~~~~~~ | | | | | (45) ...to here |...... | 167 | } else if (event.type == YAML_MAPPING_END_EVENT) { | | ~ | | | | | (46) following ‘true’ branch... | 168 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (47) ...to here | <------+ | ‘read_table_value’: events 48-51 | | 254 | query = read_table_query(parser, &table_file_name_check); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (48) returning to ‘read_table_value’ from ‘read_table_query’ |...... | 258 | if (!table_name) | | ~ | | | | | (49) following ‘false’ branch (when ‘table_name’ is non-NULL)... |...... | 261 | if (table_file_name_check) { | | ~~~~~~~~~~~~~~~~~~~~~~ | | || | | |(50) ...to here | | (51) following ‘false’ branch... | ‘read_table_value’: event 52 | |cc1: | (52): ...to here | <------+ | ‘read_table’: events 53-62 | | 301 | v = read_table_value(parser, start_event->start_mark.line + 1, 0); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (53) returning to ‘read_table’ from ‘read_table_value’ | 302 | if (v->content) | | ~ | | | | | (54) following ‘false’ branch... | 303 | compile_inline_table(v); | 304 | else if (!_lou_getTranslationTable(v->name)) | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (55) ...to here | | (56) following ‘false’ branch... |...... | 307 | free(emph_classes); | | ~~~~~~~~~~~~~~~~~~ | | | | | (57) ...to here |...... | 310 | if (!display_table) { | | ~ | | | | | (58) following ‘true’ branch (when ‘display_table’ is NULL)... | 311 | if (v->content) { | | ~~~~~~~~~~~ | | | | | | | (59) ...to here | | (60) following ‘false’ branch... |...... | 314 | } else if (!_lou_getDisplayTable(v->name)) | | ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (61) ...to here | | (62) following ‘false’ branch... | ‘read_table’: event 63 | |cc1: | (63): ...to here | ‘read_table’: event 64 | | 318 | free_table_value(v); | | ^ | | | | | (64) inlined call to ‘free_table_value’ from ‘read_table’ | +--> ‘free_table_value’: event 65 | |cc1: | (65): calling ‘free_table_value.part.0’ from ‘read_table’ | ‘free_table_value.part.0’: events 66-68 | | 286 | free_table_value(table_value *table) { | | ^~~~~~~~~~~~~~~~ | | | | | (66) entry to ‘free_table_value.part.0’ |...... | 289 | if (table->content) free((char *)table->content); | | ~ | | | | | (67) following ‘false’ branch... | 290 | free(table); | | ~~~~~~~~~~~ | | | | | (68) ...to here | <------+ | ‘read_table’: event 69 | | 318 | free_table_value(v); | | ^ | | | | | (69) inlined call to ‘free_table_value’ from ‘read_table’ | +--> ‘free_table_value’: event 70 | |cc1: | (70): returning to ‘read_table’ from ‘free_table_value.part.0’ | <-------------+ | ‘main’: events 71-78 | | 1097 | if (!(tables[0] = read_table(&event, &parser, display_table))) break; | | ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | | (71) returning to ‘main’ from ‘read_table’ | | (72) following ‘false’ branch... | 1098 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (73) ...to here |...... | 1101 | if (!yaml_parser_parse(&parser, &event)) | | ~ | | | | | (74) following ‘false’ branch... |...... | 1105 | if ((tables[k++] = read_table(&event, &parser, display_table))) { | | ~ ~~~ | | | | | | | (75) ...to here | | (76) following ‘false’ branch... |...... | 1114 | if (event.type != YAML_SCALAR_EVENT) yaml_error(YAML_SCALAR_EVENT, &event); | | ~~~~~~~~~~~ | | | | | | | (77) ...to here | | (78) following ‘false’ branch... | ‘main’: event 79 | |cc1: | (79): ...to here | ‘main’: events 80-82 | | 1119 | if (!strcmp((const char *)event.data.scalar.value, "flags")) { | | ^ | | | | | (80) following ‘true’ branch (when the strings are equal)... | 1120 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (81) ...to here | 1121 | read_flags(&parser, &testmode); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (82) calling ‘read_flags’ from ‘main’ | +--> ‘read_flags’: events 83-89 | | 323 | read_flags(yaml_parser_t *parser, int *testmode) { | | ^~~~~~~~~~ | | | | | (83) entry to ‘read_flags’ |...... | 329 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_MAPPING_START_EVENT)) | | ~ | | | | | (84) following ‘false’ branch... |...... | 332 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (85) ...to here |...... | 363 | if (!parse_error) yaml_parse_error(parser); | | ~ | | | | | (86) following ‘false’ branch (when ‘parse_error != 0’)... | 364 | if (event.type != YAML_MAPPING_END_EVENT) yaml_error(YAML_MAPPING_END_EVENT, &event); | | ~~~~~~~~~~~ | | | | | | | (87) ...to here | | (88) following ‘false’ branch... | 365 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (89) ...to here | <------+ | ‘main’: events 90-97 | | 1121 | read_flags(&parser, &testmode); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (90) returning to ‘main’ from ‘read_flags’ | 1122 | | 1123 | if (!yaml_parser_parse(&parser, &event) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (91) following ‘false’ branch... (93) following ‘false’ branch... | 1124 | (event.type != YAML_SCALAR_EVENT) || | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | | (92) ...to here (95) following ‘false’ branch (when the strings are equal)... | 1125 | strcmp((const char *)event.data.scalar.value, "tests")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (94) ...to here |...... | 1128 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (96) ...to here | 1129 | read_tests(&parser, tables, display_table, testmode); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (97) calling ‘read_tests’ from ‘main’ | +--> ‘read_tests’: events 98-107 | | 915 | read_tests( | | ^~~~~~~~~~ | | | | | (98) entry to ‘read_tests’ |...... | 918 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SEQUENCE_START_EVENT)) | | ~ | | | | | (99) following ‘false’ branch... |...... | 921 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (100) ...to here |...... | 925 | if (!yaml_parser_parse(parser, &event)) { | | ~ | | | | | (101) following ‘false’ branch... |...... | 928 | if (event.type == YAML_SEQUENCE_END_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (102) ...to here | | (103) following ‘false’ branch... |...... | 931 | } else if (event.type == YAML_SEQUENCE_START_EVENT) { | | ~ | | | | | (104) ...to here | | (105) following ‘true’ branch... | 932 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (106) ...to here | 933 | read_test(parser, tables, display_table, testmode); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (107) calling ‘read_test’ from ‘read_tests’ | +--> ‘read_test’: events 108-119 | | 814 | read_test(yaml_parser_t *parser, char **tables, const char *display_table, int testmode) { | | ^~~~~~~~~ | | | | | (108) entry to ‘read_test’ |...... | 829 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SCALAR_EVENT)) | | ~ | | | | | (109) following ‘false’ branch... |...... | 832 | word = strndup((const char *)event.data.scalar.value, event.data.scalar.length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (110) ...to here |...... | 835 | if (!yaml_parser_parse(parser, &event) || (event.type != YAML_SCALAR_EVENT)) | | ~ | | | | | (111) following ‘false’ branch... |...... | 839 | strndup((const char *)event.data.scalar.value, event.data.scalar.length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (112) ...to here |...... | 842 | if (!yaml_parser_parse(parser, &event)) yaml_parse_error(parser); | | ~ | | | | | (113) following ‘false’ branch... |...... | 845 | if (event.type == YAML_SCALAR_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (114) ...to here | | (115) following ‘false’ branch... |...... | 855 | if (event.type == YAML_MAPPING_START_EVENT) { | | ~~~~~~~~~~~ | | | | | | | (116) ...to here | | (117) following ‘true’ branch... | 856 | yaml_event_delete(&event); | | ~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (118) ...to here | 857 | read_options(parser, testmode, parsed_strlen(word), parsed_strlen(translation), | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (119) calling ‘read_options’ from ‘read_test’ | 858 | &xfail, &mode, &typeform, &inPos, &outPos, &cursorPos, &cursorOutPos, | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 859 | &maxOutputLen, &realInputLen); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | +--> ‘read_options’: events 120-126 | | 679 | read_options(yaml_parser_t *parser, int testmode, int wordLen, int translationLen, | | ^~~~~~~~~~~~ | | | | | (120) entry to ‘read_options’ |...... | 693 | while ((parse_error = yaml_parser_parse(parser, &event)) && | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (121) following ‘true’ branch (when ‘parse_error != 0’)... | | (123) following ‘true’ branch... | 694 | (event.type == YAML_SCALAR_EVENT)) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (122) ...to here | 695 | option_name = | 696 | strndup((const char *)event.data.scalar.value, event.data.scalar.length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (124) ...to here | | (125) this call could return NULL | 697 | | 698 | if (!strcmp(option_name, "xfail")) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (126) argument 1 (‘option_name’) from (125) could be NULL where non-null expected | In file included from ../tools/gnulib/string.h:41, from lou_checkyaml.c:27: /usr/include/string.h:156:12: note: argument 1 of ‘strcmp’ must be non-null 156 | extern int strcmp (const char *__s1, const char *__s2) | ^~~~~~ lou_checkyaml.c: In function ‘main’: lou_checkyaml.c:1029:17: warning: use of possibly-NULL ‘dir_name’ where non-null expected [CWE-690] [-Wanalyzer-possible-null-argument] 1029 | int i = strlen(dir_name); | ^~~~~~~~~~~~~~~~ ‘main’: events 1-8 | | 973 | while ((optc = getopt_long(argc, argv, "hv", longopts, NULL)) != -1) switch (optc) { | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~ | | | | | (1) following ‘false’ branch (when ‘optc == -1’)... |...... | 990 | if (optind != argc - 1) { | | ~ ~~~~~~~~ | | | | | | | (2) ...to here | | (3) following ‘false’ branch... |...... | 1021 | file_name = argv[1]; | | ~~~~~~~~~~~~~~~~~~~ | | | | | (4) ...to here | 1022 | file = fopen(file_name, "rb"); | 1023 | if (!file) { | | ~ | | | | | (5) following ‘false’ branch (when ‘file’ is non-NULL)... |...... | 1028 | char *dir_name = strdup(file_name); | | ~~~~~~~~~~~~~~~~~ | | | | | (6) ...to here | | (7) this call could return NULL | 1029 | int i = strlen(dir_name); | | ~~~~~~~~~~~~~~~~ | | | | | (8) argument 1 (‘dir_name’) from (7) could be NULL where non-null expected | /usr/include/string.h:407:15: note: argument 1 of ‘strlen’ must be non-null 407 | extern size_t strlen (const char *__s) | ^~~~~~ lou_checkyaml.c:968:1: warning: stack protector not protecting local variables: variable length buffer [-Wstack-protector] 968 | main(int argc, char *argv[]) { | ^~~~ lou_checkyaml.c: At top level: lou_checkyaml.c:86: warning: macro "EXIT_SKIPPED" is not used [-Wunused-macros] 86 | #define EXIT_SKIPPED 77 | libtool: warning: remember to run 'libtool --finish /usr/lib' libtool: warning: '../liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '/var/pisi/liblouis-3.27.0-10/work/liblouis-3.27.0/liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '../liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '/var/pisi/liblouis-3.27.0-10/work/liblouis-3.27.0/liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '../liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '/var/pisi/liblouis-3.27.0-10/work/liblouis-3.27.0/liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '../liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '/var/pisi/liblouis-3.27.0-10/work/liblouis-3.27.0/liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '../liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '/var/pisi/liblouis-3.27.0-10/work/liblouis-3.27.0/liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '../liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '/var/pisi/liblouis-3.27.0-10/work/liblouis-3.27.0/liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '../liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '/var/pisi/liblouis-3.27.0-10/work/liblouis-3.27.0/liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '../liblouis/liblouis.la' has not been installed in '/usr/lib' libtool: warning: '/var/pisi/liblouis-3.27.0-10/work/liblouis-3.27.0/liblouis/liblouis.la' has not been installed in '/usr/lib' warning: build_py: byte-compiling is disabled, skipping. warning: install_lib: byte-compiling is disabled, skipping. /var/pisi/liblouis-3.27.0-10/work/liblouis-3.27.0/python/setup.py:25: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives from distutils.core import setup warning: build_py: byte-compiling is disabled, skipping. warning: install_lib: byte-compiling is disabled, skipping.