<commit_before>root:table {
  // Contains textual descriptions of runtime errors.
  descriptions:table {
    // function
    InfoCStdFunction:string { "Note: Error was raised by call to function {function}." }

    // function
    // parameter
    InfoCStdFunctionParameter {
      "{function, select, "
        "strcpy {"
          "{parameter, plural, "
            "=1    {Note: Error was raised for the @[parameter=1]destination parameter@[] passed to strcpy (first parameter).}"
            "=2    {Note: Error was raised for the @[parameter=2]source parameter@[] passed to strcpy (second parameter).}"
            "other {Note: Error was raised for @[parameter={parameter}]parameter {parameter}@[] passed to strcpy.}}}"
        "other {"
          "{parameter, plural, "
            "=1    {Note: Error was raised for the @[arg:parameter]first parameter@[] passed to function {function}.}"
            "=2    {Note: Error was raised for the @[arg:parameter]second parameter@[] passed to function {function}.}"
            "=3    {Note: Error was raised for the @[arg:parameter]third parameter@[] passed to function {function}.}"
            "=4    {Note: Error was raised for the @[arg:parameter]fourth parameter@[] passed to function {function}.}"
            "=5    {Note: Error was raised for the @[arg:parameter]fifth parameter@[] passed to function {function}.}"
            "=6    {Note: Error was raised for the @[arg:parameter]sixth parameter@[] passed to function {function}.}"
            "=7    {Note: Error was raised for the @[arg:parameter]seventh parameter@[] passed to function {function}.}"
            "=8    {Note: Error was raised for the @[arg:parameter]eighth parameter@[] passed to function {function}.}"
            "=9    {Note: Error was raised for the @[arg:parameter]ninth parameter@[] passed to function {function}.}"
            "=10   {Note: Error was raised for the @[arg:parameter]tenth parameter@[] passed to function {function}.}"
            "other {Note: Error was raised for @[arg:parameter]parameter {parameter}@[] passed to function {function}.}}}"
      "}"
    }

    // element
    InfoElementOfArray {
      "Note: Error was detected with array element with index {element}."
    }

    // select MemoryAccess {read, write}
    // address
    // size
    MemoryUnowned:string {
      "{access_type, select, "
        "read {{address, select, "
          "NULL {Attempt to dereference NULL pointer for memory read.}"
          "other {Attempt to read unowned memory at address {address} ({size, plural, =1 {one byte} other {{size} bytes}}).}}}"
        "write {{address, select, "
          "NULL {Attempt to dereference NULL pointer for memory write.}"
          "other {Attempt to write unowned memory at address {address} ({size, plural, =1 {one byte} other {{size} bytes}}).}}}"
        "other {{address, select, "
          "NULL {Attempt to dereference NULL pointer.}"
          "other {Attempt to {access_type} unowned memory at address {address} ({size, plural, =1 {one byte} other {{size} bytes}}).}}}"
      "}"
    }

    // address
    // size
    MemoryUninitialized:string {
      "Read uninitialized memory from address {address} ({size} bytes)."
    }

    // select MemoryAccess {read, write}
    // access address
    // access size
    // object
    // object address
    // object size
    MemoryOverflow:string {
      "Attempt to {access_type} memory at address {access_address} ({access_size} bytes) overflows object at address {object_address} ({object_size} bytes).}"
    }

    // dynamic memory function
    // address
    BadDynamicMemoryAddress:string {
      "{function, select, "
        "free {Bad address {address} given to free.}"
        "realloc {Bad address {address} given to realloc.}"
        "other {Bad address {address} given to function {function}.}"
      "}"
    }

    // function name
    // overlap address
    // overlap size
    OverlappingSourceDest:string {
      "Function {function} source and destination memory blocks overlap at address {address} ({size} bytes)."
    }

    // string function name
    // address of invalid string
    // index of the argument that held the pointer
    InvalidCString:string {
      "{function, select, "
        "other {"
          "{parameter, plural, "
            "=1    {The pointer passed as the @[arg:parameter]first parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=2    {The pointer passed as the @[arg:parameter]second parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=3    {The pointer passed as the @[arg:parameter]third parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=4    {The pointer passed as the @[arg:parameter]fourth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=5    {The pointer passed as the @[arg:parameter]fifth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=6    {The pointer passed as the @[arg:parameter]sixth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=7    {The pointer passed as the @[arg:parameter]seventh parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=8    {The pointer passed as the @[arg:parameter]eighth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=9    {The pointer passed as the @[arg:parameter]ninth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=10   {The pointer passed as the @[arg:parameter]tenth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "other {The pointer passed as @[arg:parameter]parameter {parameter}@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
          "}"
        "}"
      "}"
    }
    
    // dummy
    DivideByZero:string {
      "Divide by zero!"
    }

    // dummy
    IntegerOverflow:string {
      "Integer overflow!"
    }

    // dummy
    IntegerUnderflow:string {
      "Integer underflow!"
    }

    // address
    PointerObjectNULL:string {
      "Attempting to dereference a pointer that does not refer to an object."
    }

    // object
    // address
    PointerObjectMismatch:string {
      "Attempting to dereference a pointer that no longer refers to its target object."
      " This might be caused by accessing an array using an invalid index,"
      " by dereferencing a pointer that refers to memory which has been deallocated,"
      " or by incorrect use of pointer arithmetic."
    }

    // function
    // address
    // parameter
    PassPointerToUnowned:string {
      "Parameter {parameter} passed to function {function} points to unowned memory at address {address}."
    }

    // function
    // address
    // parameter
    PassPointerToUninitialized:string {
      "Parameter {parameter} passed to function {function} points to uninitialized memory at address {address}."
    }

    // function
    // parameter
    // access_address
    // access_size
    // accessible_size
    // object
    // object_address
    // object_size
    PassPointerToInsufficient:string {
      "{parameter, plural, "
        "=1    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the first parameter@[].}"
        "=2    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the second parameter@[].}"
        "=3    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the third parameter@[].}"
        "=4    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the fourth parameter@[].}"
        "=5    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the fifth parameter@[].}"
        "=6    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the sixth parameter@[].}"
        "=7    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the seventh parameter@[].}"
        "=8    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the eighth parameter@[].}"
        "=9    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the ninth parameter@[].}"
        "=10   {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the tenth parameter@[].}"
        "other {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]parameter {parameter}@[].}"
      "}"

      "{access_size, plural, "
        "=1    { In this case the function required one byte,}"
        "other { In this case the function required {access_size} bytes,}"
      "}"

      "{accessible_size, plural, "
        "=0    { but none were available.}"
        "=1    { but only one was available.}"
        "other { but only {accessible_size} were available.}"
      "}"
    }

    // function
    // parameter
    PassInvalidStream:string {
      "Parameter {parameter} passed to function {function} is not a valid FILE pointer."
    }

    // function
    // stream
    UseInvalidStream:string {
      "Call to function \"{function}\" would use standard stream \"{stream}\", which is closed. Perhaps the program previously closed this stream by calling fclose({stream})?"
    }

    // function
    // parameter
    PassInvalidDIR:string {
      "Parameter {parameter} passed to function {function} is not a valid DIR pointer."
    }

    // function
    // parameter
    // start
    FormatSpecifierParse:string {
      "Failed to parse format specifier starting at position {start} in the format string provided to function {function} (as parameter {parameter})."
    }

    // function
    // parameter
    // start
    // flag
    // end
    FormatSpecifierFlag:string {
      "Invalid flag \"{flag}\" supplied to format specifier starting at position {start} in the format string provided to function {function} (as parameter {parameter})."
    }

    // function
    // parameter
    // start
    // end
    FormatSpecifierWidthDenied:string {
      "In the format string provided to function {function} (as parameter {parameter}), a width was specified for the conversion specifier starting at position {start}, but this conversion specifier does not allow a width to be specified."
    }

    // function
    // parameter
    // start
    // end
    // width_parameter
    FormatSpecifierWidthArgType:string {
      "When calling function \"{function}\", in the format string provided (as parameter {parameter}), the conversion specifier starting at position {start} indicated that a width would be passed as an argument (this is indicated by the '*' character). However, the argument provided (as parameter {width_parameter}) was not of type \"int\", which it is required to be."
    }

    // function
    // parameter
    // start
    // end
    FormatSpecifierWidthMissing:string {
      "When calling function \"{function}\", in the format string provided (as parameter {parameter}), the conversion specifier starting at position {start} did not provide a maximum field width. It is possible for this to lead to a buffer overflow (if the conversion matches more characters than can fit into the destination buffer). For safety, provide a maximum field width (as an integer written directly after the \"%\" character that begins the conversion specifier)."
    }

    // function
    // parameter
    // start
    // end
    FormatSpecifierPrecisionDenied:string {
      "In the format string provided to function {function} (as parameter {parameter}), a precision was specified for the conversion specifier starting at position {start}, but this conversion specifier does not allow a precision to be specified."
    }

    // function
    // parameter
    // start
    // end
    // precision_parameter
    FormatSpecifierPrecisionArgType:string {
      "When calling function \"{function}\", in the format string provided (as parameter {parameter}), the conversion specifier starting at position {start} indicated that a precision would be passed as an argument (this is indicated by the '*' character following the precision character '.'). However, the argument provided (as parameter {precision_parameter}) was not of type \"int\", which it is required to be."
    }

    // function
    // parameter
    // start
    // end
    // length
    FormatSpecifierLengthDenied:string {
      "In the format string provided to function {function} (as parameter {parameter}), the length modifier \"{length}\" was used for the conversion specifier starting at position {start}, but this conversion specifier does not support this length modifier."
    }

    // function
    // parameter
    // start
    // end
    FormatSpecifierSuppressionDenied:string {
      "In the format string provided to function {function} (as parameter {parameter}), the assignment-suppressing character \"*\" was present in the conversion specifier starting at position {start}, but this conversion specifier does not support assignment suppression."
    }

    // function
    // format_index
    // specifier_start
    // specifier_end
    // specifier_length
    // argument
    // bytes_available
    // bytes_required
    //
    ScanFormattedStringOverflow:string {
      "An overflow occurred while matching the string conversion specifier at character {specifier_start} in the format string given to function {function}."
      " There {bytes_available, plural, =0 {were no bytes available} =1 {was one byte available} other {were {bytes_available} bytes available}}"
      " at the destination of the pointer given as argument {argument},"
      " but the matched string required {bytes_required, plural, =1 {one byte} other {{bytes_required} bytes}}."
      " To avoid potential overflows when using the various \"scan\" functions to match strings, one should always specify a \"maximum field width\" for the conversion."
      " The maximum field width specifies the maximum number of characters that will be used to match a conversion."
      " It is specified by placing an integer number, greater than zero, after the introductory \"%\" character."
      " For example, if we were reading into a buffer that could hold 20 characters, we would specify the maximum field width to be 19 like so: \"%19s\""
      " (note that the last character in the buffer is reserved for the terminating null character which will be placed at the end of the string by the scan function)."
    }

    // function
    // expected
    // received
    VarArgsSuperfluous:string {
      "Superfluous arguments passed to function {function}. Expected "
        "{expected, plural, =0 {no variadic arguments} =1 {{expected} variadic argument} other {{expected} variadic arguments}}"
        ", but received "
        "{received, plural, =0 {none.} other {only {received}.}}"
    }

    // function
    // expected
    // received
    VarArgsInsufficient:string {
      "Insufficient arguments passed to function {function}. Expected "
        "{expected, plural, =1 {{expected} variadic argument} other {{expected} variadic arguments}}"
        ", but received "
        "{received, plural, =0 {none.} other {only {received}.}}"
    }

    // function
    VarArgsExpectedCharPointer:string {
      "Argument is not a character pointer (but {function} requires it to be)."
    }

    // function
    VarArgsExpectedCStringArray:string {
      "{function, select, "
        "execle {The {function} function expects the argument list's NULL terminator to be followed by a pointer to an array of pointers to NULL-terminated character strings, each of which specifies an environment variable for the new process. The array itself is also terminated by a NULL pointer. Consult documentation of {function} for more details.}"
        "other {Argument is not a pointer to a NULL-terminated array of C strings, but {function} requires it to be.}}"
    }

    // function
    VarArgsNonTerminated:string {
      "The variadic argument list for {function} must be terminated by a NULL pointer."
    }

    // function
    VarArgsPostTerminator:string {
      "Argument follows terminating NULL pointer and thus will not be used by {function}."
    }

    // function
    UnsafeMultithreaded:string {
      "Calling function {function} in a multithreaded program is unsafe."
    }

    // function
    // parameter
    NonTerminatedArray:string {
      "Passing a non-terminated array to function {function} as parameter {parameter}, but a terminated array is expected."
    }

    //
    StackOverflowAlloca:string {
      "Required memory allocation would exceed the limit of the stack. This may be caused by the program recursing infinitely, or by using excessively large variables."
    }
  }
}
<commit_msg>Don't mention the raw address in BadDynamicMemoryAddress's description.<commit_after>root:table {
  // Contains textual descriptions of runtime errors.
  descriptions:table {
    // function
    InfoCStdFunction:string { "Note: Error was raised by call to function {function}." }

    // function
    // parameter
    InfoCStdFunctionParameter {
      "{function, select, "
        "strcpy {"
          "{parameter, plural, "
            "=1    {Note: Error was raised for the @[parameter=1]destination parameter@[] passed to strcpy (first parameter).}"
            "=2    {Note: Error was raised for the @[parameter=2]source parameter@[] passed to strcpy (second parameter).}"
            "other {Note: Error was raised for @[parameter={parameter}]parameter {parameter}@[] passed to strcpy.}}}"
        "other {"
          "{parameter, plural, "
            "=1    {Note: Error was raised for the @[arg:parameter]first parameter@[] passed to function {function}.}"
            "=2    {Note: Error was raised for the @[arg:parameter]second parameter@[] passed to function {function}.}"
            "=3    {Note: Error was raised for the @[arg:parameter]third parameter@[] passed to function {function}.}"
            "=4    {Note: Error was raised for the @[arg:parameter]fourth parameter@[] passed to function {function}.}"
            "=5    {Note: Error was raised for the @[arg:parameter]fifth parameter@[] passed to function {function}.}"
            "=6    {Note: Error was raised for the @[arg:parameter]sixth parameter@[] passed to function {function}.}"
            "=7    {Note: Error was raised for the @[arg:parameter]seventh parameter@[] passed to function {function}.}"
            "=8    {Note: Error was raised for the @[arg:parameter]eighth parameter@[] passed to function {function}.}"
            "=9    {Note: Error was raised for the @[arg:parameter]ninth parameter@[] passed to function {function}.}"
            "=10   {Note: Error was raised for the @[arg:parameter]tenth parameter@[] passed to function {function}.}"
            "other {Note: Error was raised for @[arg:parameter]parameter {parameter}@[] passed to function {function}.}}}"
      "}"
    }

    // element
    InfoElementOfArray {
      "Note: Error was detected with array element with index {element}."
    }

    // select MemoryAccess {read, write}
    // address
    // size
    MemoryUnowned:string {
      "{access_type, select, "
        "read {{address, select, "
          "NULL {Attempt to dereference NULL pointer for memory read.}"
          "other {Attempt to read unowned memory at address {address} ({size, plural, =1 {one byte} other {{size} bytes}}).}}}"
        "write {{address, select, "
          "NULL {Attempt to dereference NULL pointer for memory write.}"
          "other {Attempt to write unowned memory at address {address} ({size, plural, =1 {one byte} other {{size} bytes}}).}}}"
        "other {{address, select, "
          "NULL {Attempt to dereference NULL pointer.}"
          "other {Attempt to {access_type} unowned memory at address {address} ({size, plural, =1 {one byte} other {{size} bytes}}).}}}"
      "}"
    }

    // address
    // size
    MemoryUninitialized:string {
      "Read uninitialized memory from address {address} ({size} bytes)."
    }

    // select MemoryAccess {read, write}
    // access address
    // access size
    // object
    // object address
    // object size
    MemoryOverflow:string {
      "Attempt to {access_type} memory at address {access_address} ({access_size} bytes) overflows object at address {object_address} ({object_size} bytes).}"
    }

    // dynamic memory function
    // address
    BadDynamicMemoryAddress:string {
      "{function, select, "
        "free {Attempting to free memory that is not dynamically allocated.}"
        "realloc {Attempting to realloc memory that is not dynamically allocated.}"
        "other {Bad address {address} given to function {function}.}"
      "}"
    }

    // function name
    // overlap address
    // overlap size
    OverlappingSourceDest:string {
      "Function {function} source and destination memory blocks overlap at address {address} ({size} bytes)."
    }

    // string function name
    // address of invalid string
    // index of the argument that held the pointer
    InvalidCString:string {
      "{function, select, "
        "other {"
          "{parameter, plural, "
            "=1    {The pointer passed as the @[arg:parameter]first parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=2    {The pointer passed as the @[arg:parameter]second parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=3    {The pointer passed as the @[arg:parameter]third parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=4    {The pointer passed as the @[arg:parameter]fourth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=5    {The pointer passed as the @[arg:parameter]fifth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=6    {The pointer passed as the @[arg:parameter]sixth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=7    {The pointer passed as the @[arg:parameter]seventh parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=8    {The pointer passed as the @[arg:parameter]eighth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=9    {The pointer passed as the @[arg:parameter]ninth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "=10   {The pointer passed as the @[arg:parameter]tenth parameter@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
            "other {The pointer passed as @[arg:parameter]parameter {parameter}@[] to function {function} does not refer to a C string. A C string must be terminated by a null character.}"
          "}"
        "}"
      "}"
    }
    
    // dummy
    DivideByZero:string {
      "Divide by zero!"
    }

    // dummy
    IntegerOverflow:string {
      "Integer overflow!"
    }

    // dummy
    IntegerUnderflow:string {
      "Integer underflow!"
    }

    // address
    PointerObjectNULL:string {
      "Attempting to dereference a pointer that does not refer to an object."
    }

    // object
    // address
    PointerObjectMismatch:string {
      "Attempting to dereference a pointer that no longer refers to its target object."
      " This might be caused by accessing an array using an invalid index,"
      " by dereferencing a pointer that refers to memory which has been deallocated,"
      " or by incorrect use of pointer arithmetic."
    }

    // function
    // address
    // parameter
    PassPointerToUnowned:string {
      "Parameter {parameter} passed to function {function} points to unowned memory at address {address}."
    }

    // function
    // address
    // parameter
    PassPointerToUninitialized:string {
      "Parameter {parameter} passed to function {function} points to uninitialized memory at address {address}."
    }

    // function
    // parameter
    // access_address
    // access_size
    // accessible_size
    // object
    // object_address
    // object_size
    PassPointerToInsufficient:string {
      "{parameter, plural, "
        "=1    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the first parameter@[].}"
        "=2    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the second parameter@[].}"
        "=3    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the third parameter@[].}"
        "=4    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the fourth parameter@[].}"
        "=5    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the fifth parameter@[].}"
        "=6    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the sixth parameter@[].}"
        "=7    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the seventh parameter@[].}"
        "=8    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the eighth parameter@[].}"
        "=9    {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the ninth parameter@[].}"
        "=10   {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]the tenth parameter@[].}"
        "other {There was insufficient memory at the destination of the pointer passed to @[arg:function]function {function}@[] as @[arg:parameter]parameter {parameter}@[].}"
      "}"

      "{access_size, plural, "
        "=1    { In this case the function required one byte,}"
        "other { In this case the function required {access_size} bytes,}"
      "}"

      "{accessible_size, plural, "
        "=0    { but none were available.}"
        "=1    { but only one was available.}"
        "other { but only {accessible_size} were available.}"
      "}"
    }

    // function
    // parameter
    PassInvalidStream:string {
      "Parameter {parameter} passed to function {function} is not a valid FILE pointer."
    }

    // function
    // stream
    UseInvalidStream:string {
      "Call to function \"{function}\" would use standard stream \"{stream}\", which is closed. Perhaps the program previously closed this stream by calling fclose({stream})?"
    }

    // function
    // parameter
    PassInvalidDIR:string {
      "Parameter {parameter} passed to function {function} is not a valid DIR pointer."
    }

    // function
    // parameter
    // start
    FormatSpecifierParse:string {
      "Failed to parse format specifier starting at position {start} in the format string provided to function {function} (as parameter {parameter})."
    }

    // function
    // parameter
    // start
    // flag
    // end
    FormatSpecifierFlag:string {
      "Invalid flag \"{flag}\" supplied to format specifier starting at position {start} in the format string provided to function {function} (as parameter {parameter})."
    }

    // function
    // parameter
    // start
    // end
    FormatSpecifierWidthDenied:string {
      "In the format string provided to function {function} (as parameter {parameter}), a width was specified for the conversion specifier starting at position {start}, but this conversion specifier does not allow a width to be specified."
    }

    // function
    // parameter
    // start
    // end
    // width_parameter
    FormatSpecifierWidthArgType:string {
      "When calling function \"{function}\", in the format string provided (as parameter {parameter}), the conversion specifier starting at position {start} indicated that a width would be passed as an argument (this is indicated by the '*' character). However, the argument provided (as parameter {width_parameter}) was not of type \"int\", which it is required to be."
    }

    // function
    // parameter
    // start
    // end
    FormatSpecifierWidthMissing:string {
      "When calling function \"{function}\", in the format string provided (as parameter {parameter}), the conversion specifier starting at position {start} did not provide a maximum field width. It is possible for this to lead to a buffer overflow (if the conversion matches more characters than can fit into the destination buffer). For safety, provide a maximum field width (as an integer written directly after the \"%\" character that begins the conversion specifier)."
    }

    // function
    // parameter
    // start
    // end
    FormatSpecifierPrecisionDenied:string {
      "In the format string provided to function {function} (as parameter {parameter}), a precision was specified for the conversion specifier starting at position {start}, but this conversion specifier does not allow a precision to be specified."
    }

    // function
    // parameter
    // start
    // end
    // precision_parameter
    FormatSpecifierPrecisionArgType:string {
      "When calling function \"{function}\", in the format string provided (as parameter {parameter}), the conversion specifier starting at position {start} indicated that a precision would be passed as an argument (this is indicated by the '*' character following the precision character '.'). However, the argument provided (as parameter {precision_parameter}) was not of type \"int\", which it is required to be."
    }

    // function
    // parameter
    // start
    // end
    // length
    FormatSpecifierLengthDenied:string {
      "In the format string provided to function {function} (as parameter {parameter}), the length modifier \"{length}\" was used for the conversion specifier starting at position {start}, but this conversion specifier does not support this length modifier."
    }

    // function
    // parameter
    // start
    // end
    FormatSpecifierSuppressionDenied:string {
      "In the format string provided to function {function} (as parameter {parameter}), the assignment-suppressing character \"*\" was present in the conversion specifier starting at position {start}, but this conversion specifier does not support assignment suppression."
    }

    // function
    // format_index
    // specifier_start
    // specifier_end
    // specifier_length
    // argument
    // bytes_available
    // bytes_required
    //
    ScanFormattedStringOverflow:string {
      "An overflow occurred while matching the string conversion specifier at character {specifier_start} in the format string given to function {function}."
      " There {bytes_available, plural, =0 {were no bytes available} =1 {was one byte available} other {were {bytes_available} bytes available}}"
      " at the destination of the pointer given as argument {argument},"
      " but the matched string required {bytes_required, plural, =1 {one byte} other {{bytes_required} bytes}}."
      " To avoid potential overflows when using the various \"scan\" functions to match strings, one should always specify a \"maximum field width\" for the conversion."
      " The maximum field width specifies the maximum number of characters that will be used to match a conversion."
      " It is specified by placing an integer number, greater than zero, after the introductory \"%\" character."
      " For example, if we were reading into a buffer that could hold 20 characters, we would specify the maximum field width to be 19 like so: \"%19s\""
      " (note that the last character in the buffer is reserved for the terminating null character which will be placed at the end of the string by the scan function)."
    }

    // function
    // expected
    // received
    VarArgsSuperfluous:string {
      "Superfluous arguments passed to function {function}. Expected "
        "{expected, plural, =0 {no variadic arguments} =1 {{expected} variadic argument} other {{expected} variadic arguments}}"
        ", but received "
        "{received, plural, =0 {none.} other {only {received}.}}"
    }

    // function
    // expected
    // received
    VarArgsInsufficient:string {
      "Insufficient arguments passed to function {function}. Expected "
        "{expected, plural, =1 {{expected} variadic argument} other {{expected} variadic arguments}}"
        ", but received "
        "{received, plural, =0 {none.} other {only {received}.}}"
    }

    // function
    VarArgsExpectedCharPointer:string {
      "Argument is not a character pointer (but {function} requires it to be)."
    }

    // function
    VarArgsExpectedCStringArray:string {
      "{function, select, "
        "execle {The {function} function expects the argument list's NULL terminator to be followed by a pointer to an array of pointers to NULL-terminated character strings, each of which specifies an environment variable for the new process. The array itself is also terminated by a NULL pointer. Consult documentation of {function} for more details.}"
        "other {Argument is not a pointer to a NULL-terminated array of C strings, but {function} requires it to be.}}"
    }

    // function
    VarArgsNonTerminated:string {
      "The variadic argument list for {function} must be terminated by a NULL pointer."
    }

    // function
    VarArgsPostTerminator:string {
      "Argument follows terminating NULL pointer and thus will not be used by {function}."
    }

    // function
    UnsafeMultithreaded:string {
      "Calling function {function} in a multithreaded program is unsafe."
    }

    // function
    // parameter
    NonTerminatedArray:string {
      "Passing a non-terminated array to function {function} as parameter {parameter}, but a terminated array is expected."
    }

    //
    StackOverflowAlloca:string {
      "Required memory allocation would exceed the limit of the stack. This may be caused by the program recursing infinitely, or by using excessively large variables."
    }
  }
}

{'fraction_non_alphanumeric': 0.0993228617416884, 'fraction_numerical': 0.0031636787478492535, 'mean_word_length': 2.9743024153523767, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6322916', 'n_tokens_mistral': 9225, 'n_tokens_neox': 8988, 'n_words': 3985}