)]}'
{"src/openvpn/xkey_helper.c":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"ce54e44fe23c7331d2004cd2405b7d349ed77895","unresolved":true,"context_lines":[{"line_number":250,"context_line":"        if (strlcat(alg_str, \",data\u003dmessage\", sizeof(alg_str)) \u003e\u003d sizeof(alg_str))"},{"line_number":251,"context_line":"        {"},{"line_number":252,"context_line":"            return -1;"},{"line_number":253,"context_line":"        }"},{"line_number":254,"context_line":"    }"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    dmsg(D_LOW, \"xkey management_sign: requesting sig with algorithm \u003c%s\u003e\", alg_str);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"72545cf8_7c8c9f5d","line":253,"updated":"2026-10-14 07:33:36.000000000","message":"This function says it will return `-1` on error, so this is technically correct in that sense. However, it\u0027s callback type says `0` or `1`, which is confusing:\n\n```\n/**\n * Callback for sign operation -- must be implemented for each backend and\n * is used in xkey_signature_sign(), or set when loading the key.\n * (custom key loading not yet implemented).\n *\n * @param handle opaque key handle provided by the backend -- could be null\n *               or unused for management interface.\n * @param sig    On return caller should fill this with the signature\n * @param siglen On entry *siglen has max size of sig and on return must be\n *               set to the actual size of the signature\n * @param tbs    buffer to sign\n * @param tbslen size of data in tbs buffer\n * @sigalg       contains the signature algorithm parameters\n *\n * @returns 1 on success, 0 on error.\n *\n * If sigalg.op \u003d \"Sign\", the data in tbs is the digest. If sigalg.op \u003d \"DigestSign\"\n * it is the message that the backend should hash wih appropriate hash algorithm before\n * signing. In the former case no DigestInfo header is added to tbs. This is\n * unlike the deprecated RSA_sign callback which provides encoded digest.\n * For RSA_PKCS1 signatures, the external signing function must encode the digest\n * before signing. The digest algorithm used (or to be used) is passed in the sigalg\n * structure.\n */\ntypedef int(XKEY_EXTERNAL_SIGN_fn)(void *handle, unsigned char *sig, size_t *siglen,\n                                   const unsigned char *tbs, size_t tbslen, XKEY_SIGALG sigalg);\n```","commit_id":"041a72adf5fb8166d03d3dc9ef543207bfc6ccec"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"144ea8c651231f84900a854d25122dd13871f34d","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        if (strlcat(alg_str, \",data\u003dmessage\", sizeof(alg_str)) \u003e\u003d sizeof(alg_str))"},{"line_number":251,"context_line":"        {"},{"line_number":252,"context_line":"            return -1;"},{"line_number":253,"context_line":"        }"},{"line_number":254,"context_line":"    }"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    dmsg(D_LOW, \"xkey management_sign: requesting sig with algorithm \u003c%s\u003e\", alg_str);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"09a09ce8_eb5283ce","line":253,"in_reply_to":"72545cf8_7c8c9f5d","updated":"2026-10-14 12:34:10.000000000","message":"Done","commit_id":"041a72adf5fb8166d03d3dc9ef543207bfc6ccec"}],"src/plugins/auth-pam/utils.c":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"ce54e44fe23c7331d2004cd2405b7d349ed77895","unresolved":true,"context_lines":[{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    const char *searching \u003d tosearch;"},{"line_number":75,"context_line":"    char temp[templen + 1] \u003d { 0 };"},{"line_number":76,"context_line":"    char *target \u003d temp;"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    while (scratch)"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"2c765722_cab83dde","line":75,"updated":"2026-10-14 07:33:36.000000000","message":"This is a variable-length array, and C11 doesn\u0027t allow that, so GCC 16 rejects it:\n\n```\nerror: variable-sized object may not be initialized except with an empty initializer\n\n```","commit_id":"041a72adf5fb8166d03d3dc9ef543207bfc6ccec"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"2bedb8f95c67c18376bba2f6bb24154a56168b2d","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    const char *searching \u003d tosearch;"},{"line_number":75,"context_line":"    char temp[templen + 1] \u003d { 0 };"},{"line_number":76,"context_line":"    char *target \u003d temp;"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    while (scratch)"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"732262b6_10070ac2","line":75,"in_reply_to":"2c765722_cab83dde","updated":"2026-10-14 11:29:43.000000000","message":"Done","commit_id":"041a72adf5fb8166d03d3dc9ef543207bfc6ccec"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"ce54e44fe23c7331d2004cd2405b7d349ed77895","unresolved":true,"context_lines":[{"line_number":80,"context_line":"        size_t skipped \u003d (size_t)(scratch - searching);"},{"line_number":81,"context_line":"        memcpy(target, searching, skipped);"},{"line_number":82,"context_line":"        target +\u003d skipped;"},{"line_number":83,"context_line":"        memcpy(target, replacewith, replacewithlen);"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        searching \u003d scratch + tosearchlen;"},{"line_number":86,"context_line":"        scratch \u003d strstr(searching, searchfor);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"29c88cdc_abdb959e","line":83,"updated":"2026-10-14 07:33:36.000000000","message":"`target` isn\u0027t advanced after copying `replacewith`. I think we want `target +\u003d replacewithlen;` here.","commit_id":"041a72adf5fb8166d03d3dc9ef543207bfc6ccec"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"2bedb8f95c67c18376bba2f6bb24154a56168b2d","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        size_t skipped \u003d (size_t)(scratch - searching);"},{"line_number":81,"context_line":"        memcpy(target, searching, skipped);"},{"line_number":82,"context_line":"        target +\u003d skipped;"},{"line_number":83,"context_line":"        memcpy(target, replacewith, replacewithlen);"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        searching \u003d scratch + tosearchlen;"},{"line_number":86,"context_line":"        scratch \u003d strstr(searching, searchfor);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"278eac39_89b3cdd2","line":83,"in_reply_to":"29c88cdc_abdb959e","updated":"2026-10-14 11:29:43.000000000","message":"Done","commit_id":"041a72adf5fb8166d03d3dc9ef543207bfc6ccec"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"ce54e44fe23c7331d2004cd2405b7d349ed77895","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        target +\u003d skipped;"},{"line_number":83,"context_line":"        memcpy(target, replacewith, replacewithlen);"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        searching \u003d scratch + tosearchlen;"},{"line_number":86,"context_line":"        scratch \u003d strstr(searching, searchfor);"},{"line_number":87,"context_line":"    }"},{"line_number":88,"context_line":"    return strdup(temp);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"cfb1de43_43c90eb9","line":85,"updated":"2026-10-14 07:33:36.000000000","message":"Shouldn\u0027t we use the length of `searchfor` here?","commit_id":"041a72adf5fb8166d03d3dc9ef543207bfc6ccec"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"2bedb8f95c67c18376bba2f6bb24154a56168b2d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        target +\u003d skipped;"},{"line_number":83,"context_line":"        memcpy(target, replacewith, replacewithlen);"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        searching \u003d scratch + tosearchlen;"},{"line_number":86,"context_line":"        scratch \u003d strstr(searching, searchfor);"},{"line_number":87,"context_line":"    }"},{"line_number":88,"context_line":"    return strdup(temp);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"60fd9ac5_4193ef20","line":85,"in_reply_to":"cfb1de43_43c90eb9","updated":"2026-10-14 11:29:43.000000000","message":"Done","commit_id":"041a72adf5fb8166d03d3dc9ef543207bfc6ccec"}]}
