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.