)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"ab8076bee8b8f4ac3d5891e40c486c6fcc33ffc6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9262976f_602787ec","updated":"2025-10-28 19:27:03.000000000","message":"This conflicted with Selva working on the same function, and I saw the other one first :-) - so we have commit 05a8ba808 in tree which does the `PathCchCanonicalizeEx()` bit, but not the `PathCchCombine()` part... arguably your patch is nicer, but does not apply anymore.  Can you do a new version that does the Combine thing based on master?","commit_id":"c8280023e0f621f612bb9b87aae799687a1e011f"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"0ac8458ca16c6c3a805b1a7750c284fc129797ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"91e86720_c59c5d62","in_reply_to":"9262976f_602787ec","updated":"2025-10-31 17:37:39.000000000","message":"Done","commit_id":"c8280023e0f621f612bb9b87aae799687a1e011f"},{"author":{"_account_id":1000009,"name":"selvanair","display_name":"Selva Nair","email":"selva.nair@gmail.com","username":"selvanair"},"change_message_id":"e408457aab8646997b1cf7d175c2768f769a4809","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"abbc0026_9f22edee","updated":"2025-11-07 02:48:41.000000000","message":"Please add a reported by line for https://github.com/OpenVPN/openvpn-private-issues/issues/81 (for the character case fix). May be done at commit time.\n\nThis has to be merged along with 1307 to avoid re-introducing the \"trailing slash\" bug.","commit_id":"c222a70f80ff47f44fc59be73b5b7ff0be300081"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"f85b595a0fff55dbbe868b60d81c70662602073d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"56a84a25_d9a00364","updated":"2025-11-10 22:59:36.000000000","message":"I withdraw my -2, as that has been addressed by the new version and Selva +2\u0027ing it already.","commit_id":"c816f01e9582acc93706a78c27a422a0ee36e894"},{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"0a95a224600a5b6a0c79c9ffd951d2058fc2a40b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"769376ca_1193df0a","updated":"2025-11-12 09:14:02.000000000","message":"Built and tested, looks good.","commit_id":"624d80955bca353dbc260799e12feb4a4476052e"}],"src/openvpnserv/validate.c":[{"author":{"_account_id":1000009,"name":"selvanair","display_name":"Selva Nair","email":"selva.nair@gmail.com","username":"selvanair"},"change_message_id":"c33446e8af7e6d936914231bfec63124bfa1dffb","unresolved":true,"context_lines":[{"line_number":77,"context_line":"        res \u003d PathCchCanonicalize(config_path, sizeof(config_path), fname);"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    return res \u003d\u003d S_OK \u0026\u0026 wcsncmp(config_path, s-\u003econfig_dir, wcslen(s-\u003econfig_dir)) \u003d\u003d 0;"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"65edbdf0_59c409fa","line":80,"updated":"2025-10-31 18:11:32.000000000","message":"hmm. This misses the purpose of the previous patch -- i.e., to ensure that config_dir has a trailing slash which was the source of the zeropath report.","commit_id":"ab3c7e09169fb7cc12214665567a1ba44c824b80"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"ee3897015bd2c1f93cfa2fec96e9d0de39b852bb","unresolved":true,"context_lines":[{"line_number":77,"context_line":"        res \u003d PathCchCanonicalize(config_path, sizeof(config_path), fname);"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    return res \u003d\u003d S_OK \u0026\u0026 wcsncmp(config_path, s-\u003econfig_dir, wcslen(s-\u003econfig_dir)) \u003d\u003d 0;"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"af7d5233_8513dfb0","line":80,"in_reply_to":"3e51da9a_275be521","updated":"2025-10-31 18:41:15.000000000","message":"Okay, I think optionally adding a \\ when settings_t.config_dir is set makes more sense, as it would apply to any other (future) use as well then. Will add a commit dealing with that.","commit_id":"ab3c7e09169fb7cc12214665567a1ba44c824b80"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"9e71514c67582fb5e5f63d6dcb34a7de4095bfe2","unresolved":true,"context_lines":[{"line_number":77,"context_line":"        res \u003d PathCchCanonicalize(config_path, sizeof(config_path), fname);"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    return res \u003d\u003d S_OK \u0026\u0026 wcsncmp(config_path, s-\u003econfig_dir, wcslen(s-\u003econfig_dir)) \u003d\u003d 0;"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"fe993544_9469c998","line":80,"in_reply_to":"65edbdf0_59c409fa","updated":"2025-10-31 18:19:57.000000000","message":"Which github issue # is this?","commit_id":"ab3c7e09169fb7cc12214665567a1ba44c824b80"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"b977f6e1aa864253e13bf83904c4eca75cb03131","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        res \u003d PathCchCanonicalize(config_path, sizeof(config_path), fname);"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    return res \u003d\u003d S_OK \u0026\u0026 wcsncmp(config_path, s-\u003econfig_dir, wcslen(s-\u003econfig_dir)) \u003d\u003d 0;"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"394d39d7_9ef2361a","line":80,"in_reply_to":"af7d5233_8513dfb0","updated":"2025-10-31 19:36:47.000000000","message":"#1336","commit_id":"ab3c7e09169fb7cc12214665567a1ba44c824b80"},{"author":{"_account_id":1000009,"name":"selvanair","display_name":"Selva Nair","email":"selva.nair@gmail.com","username":"selvanair"},"change_message_id":"c0c9eb0e18c790db0c4cf4d4bdb87e8ece7b89b4","unresolved":true,"context_lines":[{"line_number":77,"context_line":"        res \u003d PathCchCanonicalize(config_path, sizeof(config_path), fname);"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    return res \u003d\u003d S_OK \u0026\u0026 wcsncmp(config_path, s-\u003econfig_dir, wcslen(s-\u003econfig_dir)) \u003d\u003d 0;"},{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"3e51da9a_275be521","line":80,"in_reply_to":"fe993544_9469c998","updated":"2025-10-31 18:27:07.000000000","message":"https://github.com/OpenVPN/openvpn-private-issues/issues/22","commit_id":"ab3c7e09169fb7cc12214665567a1ba44c824b80"},{"author":{"_account_id":1000009,"name":"selvanair","display_name":"Selva Nair","email":"selva.nair@gmail.com","username":"selvanair"},"change_message_id":"ea94e5904e8f078d2a219b7e9a60922123e40dc9","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    }"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    /* canonicalize config_dir and add trailing slash before comparison */"},{"line_number":88,"context_line":"    HRESULT res \u003d PathCchCanonicalizeEx(config_dir, _countof(config_dir), s-\u003econfig_dir,"},{"line_number":89,"context_line":"                                        PATHCCH_ENSURE_TRAILING_SLASH);"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    if (res \u003d\u003d S_OK"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"68d02a1c_0271f54d","side":"PARENT","line":88,"updated":"2025-11-06 20:30:43.000000000","message":"As you are effectively reverting commit 05a8ba808, also remove \"HAVE_PATHCCH_ENSURE_TRAILING_SLASH\" introduced by there and related changes in CMakeFiles.txt. Also the follow up commit d5e6b72460a.","commit_id":"8545a3db4e83d0294d823ad6489a3040de10984e"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"d6915fc8b92343d49fdecc944366395ad006a26e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    }"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    /* canonicalize config_dir and add trailing slash before comparison */"},{"line_number":88,"context_line":"    HRESULT res \u003d PathCchCanonicalizeEx(config_dir, _countof(config_dir), s-\u003econfig_dir,"},{"line_number":89,"context_line":"                                        PATHCCH_ENSURE_TRAILING_SLASH);"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    if (res \u003d\u003d S_OK"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"14df14a0_d3e23416","side":"PARENT","line":88,"in_reply_to":"68d02a1c_0271f54d","updated":"2025-11-06 21:00:07.000000000","message":"Done in #1354","commit_id":"8545a3db4e83d0294d823ad6489a3040de10984e"},{"author":{"_account_id":1000009,"name":"selvanair","display_name":"Selva Nair","email":"selva.nair@gmail.com","username":"selvanair"},"change_message_id":"ea94e5904e8f078d2a219b7e9a60922123e40dc9","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        res \u003d PathCchCanonicalize(config_path, sizeof(config_path), fname);"},{"line_number":83,"context_line":"    }"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    return res \u003d\u003d S_OK \u0026\u0026 wcsncmp(config_path, s-\u003econfig_dir, wcslen(s-\u003econfig_dir)) \u003d\u003d 0;"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"1a4c657c_0c6a5d1e","line":85,"updated":"2025-11-06 20:30:43.000000000","message":"While at it, make this case insensitve.","commit_id":"cee6458e088ff3286ddf2ceaa57cd5bc1833ee1e"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"d6915fc8b92343d49fdecc944366395ad006a26e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        res \u003d PathCchCanonicalize(config_path, sizeof(config_path), fname);"},{"line_number":83,"context_line":"    }"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    return res \u003d\u003d S_OK \u0026\u0026 wcsncmp(config_path, s-\u003econfig_dir, wcslen(s-\u003econfig_dir)) \u003d\u003d 0;"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"2e5dfd92_b85abcb8","line":85,"in_reply_to":"1a4c657c_0c6a5d1e","updated":"2025-11-06 21:00:07.000000000","message":"Done","commit_id":"cee6458e088ff3286ddf2ceaa57cd5bc1833ee1e"},{"author":{"_account_id":1000009,"name":"selvanair","display_name":"Selva Nair","email":"selva.nair@gmail.com","username":"selvanair"},"change_message_id":"be58a0f2f7e228661e4bc539a6f5756da65f013f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        res \u003d PathCchCanonicalize(config_path, sizeof(config_path), fname);"},{"line_number":83,"context_line":"    }"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    return res \u003d\u003d S_OK \u0026\u0026 wcsncmp(config_path, s-\u003econfig_dir, wcslen(s-\u003econfig_dir)) \u003d\u003d 0;"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4c526f28_d6c55351","line":85,"in_reply_to":"2e5dfd92_b85abcb8","updated":"2025-11-06 22:12:58.000000000","message":"For got to mention that this was reported by:\nhttps://github.com/OpenVPN/openvpn-private-issues/issues/81","commit_id":"cee6458e088ff3286ddf2ceaa57cd5bc1833ee1e"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"e85986942306849dac0ab1f840c5d1d51dd3c9c2","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        res \u003d PathCchCanonicalize(config_path, sizeof(config_path), fname);"},{"line_number":83,"context_line":"    }"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    return res \u003d\u003d S_OK \u0026\u0026 wcsncmp(config_path, s-\u003econfig_dir, wcslen(s-\u003econfig_dir)) \u003d\u003d 0;"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"0bc45645_e107cbf0","line":85,"in_reply_to":"4c526f28_d6c55351","updated":"2025-11-07 16:30:34.000000000","message":"I think I\u0027ll break it out into its own commit then.","commit_id":"cee6458e088ff3286ddf2ceaa57cd5bc1833ee1e"},{"author":{"_account_id":1000009,"name":"selvanair","display_name":"Selva Nair","email":"selva.nair@gmail.com","username":"selvanair"},"change_message_id":"1d65b450d3aa18e57f4c60198b1b7b4d0b5ad5a5","unresolved":true,"context_lines":[{"line_number":75,"context_line":"    /* convert fname to full canonical path */"},{"line_number":76,"context_line":"    if (PathIsRelativeW(fname))"},{"line_number":77,"context_line":"    {"},{"line_number":78,"context_line":"        res \u003d PathCchCombine(config_path, sizeof(config_path), workdir, fname);"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":"    else"},{"line_number":81,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"121294f6_264c940d","line":78,"updated":"2025-11-06 22:04:44.000000000","message":"size should be in characters, not sizeof() isn\u0027t it? Same below in PathCchCanonicalize.","commit_id":"d989795bd7d47cdc04fb26dbbdad4dd5420921e8"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"02d46236959f6f71d716c8cb1d75707c3c92d34f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    /* convert fname to full canonical path */"},{"line_number":76,"context_line":"    if (PathIsRelativeW(fname))"},{"line_number":77,"context_line":"    {"},{"line_number":78,"context_line":"        res \u003d PathCchCombine(config_path, sizeof(config_path), workdir, fname);"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":"    else"},{"line_number":81,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"df0586da_23d5964d","line":78,"in_reply_to":"121294f6_264c940d","updated":"2025-11-07 02:16:50.000000000","message":"Good catch","commit_id":"d989795bd7d47cdc04fb26dbbdad4dd5420921e8"}]}
