)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"64136cb33cb7b8ee1c3dc13ba64f848e565ea1bc","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"801dcc41_68bdd846","updated":"2026-11-11 10:03:04.000000000","message":"Thanks! The missing `ret` assignment is a real bug, but making this branch return TRUE has two side effects:\n\n1. A lone *option* now skips the whitelist: `--foo` is only checked as a path (`\u003cconfig_dir\u003e\\--foo` passes), while openvpn.exe parses it as an option. Please only take this branch for non-options (see inline).\n\n2. A lone config file still doesn\u0027t work through the service: openvpn.exe gets `openvpn --msg-channel \u003ch\u003e foo.ovpn`, so `foo.ovpn` is taken as an extra parameter of `--msg-channel` and ignored (the \"lone arg \u003d config\" rule only applies when argc \u003d\u003d 2). Users would just see \"You must define TUN/TAP device\" instead of an empty error.\n\nTo actually support it, I\u0027d suggest building the command line as `openvpn --msg-channel \u003ch\u003e --config \u003carg\u003e` when a single non-option is given, *before* validating, and dropping the special case in ValidateOptions(). That way we keep validating exactly what openvpn.exe gets (see c139e82d).\n\nA small cmocka test for ValidateOptions() would be great too (lone `foo.ovpn`, lone `..\\evil.ovpn`, lone `--script-security`).","commit_id":"3ac6ba619e4e2bebdc5f54b0e80b79f0dcdf225a"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"50b4a3792cf9246b74ece266a654cb521425f09a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3cbf5ce3_1c8fbf04","in_reply_to":"801dcc41_68bdd846","updated":"2026-11-11 10:45:41.000000000","message":"Done","commit_id":"3ac6ba619e4e2bebdc5f54b0e80b79f0dcdf225a"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"50b4a3792cf9246b74ece266a654cb521425f09a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d7dedd47_55b10547","updated":"2026-11-11 10:45:41.000000000","message":"OK, mingw in Wine it is then. 🙂","commit_id":"f4af39057c64d44f868638c8bf1f5614b184bbd2"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"cbdb2f8d1ee1c1954566ec53d766f2451b0ba1b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"baa62777_0a6f03af","updated":"2026-11-11 11:03:48.000000000","message":"Pushed v3 to fix cppcheck warnings that were previously suppressed in moved code.","commit_id":"cfcfa546220d8c080dd4b07f6cd326808e2ae37b"},{"author":{"_account_id":1000006,"name":"Heiko Hund","display_name":"Heiko Hund","email":"heiko@ist.eigentlich.net","username":"d12fk"},"change_message_id":"894c923d3d06741edcf47e309f47bdaec5d040d8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f2fda632_eff07422","updated":"2026-11-12 04:27:52.000000000","message":"I don\u0027t think we should make this work. Any caller know to us uses --config explicitly. I\u0027d rather error out if there\u0027s a lone argument.","commit_id":"5d019414bc457a8c6d3e9d4bffeb2fe456a44ec0"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"3656dfaae01dec84a535ec92c16a31f182f3af04","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"550dc347_d257efd3","in_reply_to":"f2fda632_eff07422","updated":"2026-11-12 08:27:30.000000000","message":"Done","commit_id":"5d019414bc457a8c6d3e9d4bffeb2fe456a44ec0"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"e03264980efcc25bc16dd1a91c5132b9978c058c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d42e9050_bfc14bf4","updated":"2026-11-12 20:04:17.000000000","message":"Had to push a new version because the Doxygen checker complained about \u003chandle\u003e not being a tag Doxygen recognizes.","commit_id":"e4663828f40e1184bff8ec0801bc7f1b2ae3cf28"}],"src/openvpnserv/interactive.c":[{"author":{"_account_id":1000007,"name":"Antonio Quartulli","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"64136cb33cb7b8ee1c3dc13ba64f848e565ea1bc","unresolved":true,"context_lines":[{"line_number":399,"context_line":"    /*"},{"line_number":400,"context_line":"     * If only one argument, it is the config file"},{"line_number":401,"context_line":"     */"},{"line_number":402,"context_line":"    if (argc \u003d\u003d first + 1)"},{"line_number":403,"context_line":"    {"},{"line_number":404,"context_line":"        WCHAR *argv_tmp[2] \u003d { L\"--config\", argv[first] };"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":1,"id":"e32fe0df_f64b4e5c","line":402,"updated":"2026-11-11 10:03:04.000000000","message":"`if (argc \u003d\u003d first + 1 \u0026\u0026 !IsOption(argv[first]))` -- otherwise a lone `--option` is validated as a config path instead of against the whitelist.","commit_id":"3ac6ba619e4e2bebdc5f54b0e80b79f0dcdf225a"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"50b4a3792cf9246b74ece266a654cb521425f09a","unresolved":false,"context_lines":[{"line_number":399,"context_line":"    /*"},{"line_number":400,"context_line":"     * If only one argument, it is the config file"},{"line_number":401,"context_line":"     */"},{"line_number":402,"context_line":"    if (argc \u003d\u003d first + 1)"},{"line_number":403,"context_line":"    {"},{"line_number":404,"context_line":"        WCHAR *argv_tmp[2] \u003d { L\"--config\", argv[first] };"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":1,"id":"47ff4979_7e6e70b7","line":402,"in_reply_to":"e32fe0df_f64b4e5c","updated":"2026-11-11 10:45:41.000000000","message":"Done","commit_id":"3ac6ba619e4e2bebdc5f54b0e80b79f0dcdf225a"},{"author":{"_account_id":1000006,"name":"Heiko Hund","display_name":"Heiko Hund","email":"heiko@ist.eigentlich.net","username":"d12fk"},"change_message_id":"30d90d02fc66993f9498f04c818dc97b40a73ac4","unresolved":true,"context_lines":[{"line_number":355,"context_line":"}"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"/*"},{"line_number":358,"context_line":" * openvpn.exe takes a lone argument as the config file only when there are"},{"line_number":359,"context_line":" * no other arguments, and takes non-options after --msg-channel \u003chandle\u003e as"},{"line_number":360,"context_line":" * its extra parameters."},{"line_number":361,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"095c33f8_d42f398c","line":358,"updated":"2026-11-12 17:54:09.000000000","message":"Can you make this doxygen, please","commit_id":"840b0bd7cbeb34ecb479f1d12302b8c037337bb0"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"f7e1a8c0d331c33471fdbfdd63dada0cff9151e4","unresolved":false,"context_lines":[{"line_number":355,"context_line":"}"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"/*"},{"line_number":358,"context_line":" * openvpn.exe takes a lone argument as the config file only when there are"},{"line_number":359,"context_line":" * no other arguments, and takes non-options after --msg-channel \u003chandle\u003e as"},{"line_number":360,"context_line":" * its extra parameters."},{"line_number":361,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"28d42a47_9074fb43","line":358,"in_reply_to":"095c33f8_d42f398c","updated":"2026-11-12 18:02:04.000000000","message":"Done","commit_id":"840b0bd7cbeb34ecb479f1d12302b8c037337bb0"},{"author":{"_account_id":1000006,"name":"Heiko Hund","display_name":"Heiko Hund","email":"heiko@ist.eigentlich.net","username":"d12fk"},"change_message_id":"cded6e5062972072374a246f075fe8378a5311ec","unresolved":false,"context_lines":[{"line_number":358,"context_line":" * Check whether the user options start with a non-option"},{"line_number":359,"context_line":" *"},{"line_number":360,"context_line":" * openvpn.exe takes a lone argument as the config file only when there are"},{"line_number":361,"context_line":" * no other arguments, and takes non-options after --msg-channel \u003chandle\u003e as"},{"line_number":362,"context_line":" * its extra parameters."},{"line_number":363,"context_line":" *"},{"line_number":364,"context_line":" * @param  cmdline  openvpn.exe command line built by the service"}],"source_content_type":"text/x-csrc","patch_set":6,"id":"43eba92d_e6db2908","line":361,"updated":"2026-11-12 20:04:38.000000000","message":"the brackets can be \\-escaped for doxygen also, jfyi","commit_id":"a8daf527aea3e6b2ba8405f3fd2fb14b961414a8"}]}
