{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:07.623814Z","repo":{"ref":{"host":"github.com","owner":"shadowsocksr-backup","name":"shadowsocksr-csharp"},"default_branch":"master","clone_url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp.git","html_url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp","description":null,"stars":4472,"forks":1794,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":8391,"primary_language":"C#","license_spdx":"GPL-3.0","created_at":"2017-07-27T14:46:22Z","pushed_at":"2019-04-10T06:19:06Z","security_policy_url":null,"distribution":{"owner_created_at":"2017-07-27T13:00:13Z","owner_type":"Organization","release_assets":[{"name":"ShadowsocksR-4.7.0-win.7z","size":715587,"download_count":920250,"release_tag":"4.7.0","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/releases/download/4.7.0/ShadowsocksR-4.7.0-win.7z"}]}},"commit_sha":"932b86ef57836bdb20fa96d88823174b5ecced60","profile":{"lines_by_language":{"C#":39505,"Shell":6},"files_by_category":{"source":136,"other":18,"binary":11,"docs":8,"test":2,"config":1},"source_lines":39296,"test_lines":215},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.65,"coverage":1.0,"label":"none-detected","breakdown":{"attributed_share":0.0,"suspected_share":0.0,"estimated_share":0.0,"ai_artifacts":0.0,"flagged_work_units":0.0,"flagged_releases":0.0,"style_index":0.127},"summary":"No AI attribution or AI-consistent velocity signals detected."},"quality":{"score":54.6,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":45.4,"duplication":49.2,"lint":99.2,"testing":20.4,"docs":100.0,"type_safety":null,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.01, no CI test run detected; 26% of function code in complex or long functions; 12% duplicated lines. Weakest area: testing."},"security":{"score":80.3,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":96.7,"sast":100.0,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: no high-impact findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":702.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":74892.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2013-01":{"loc":1302,"attributed_loc":0},"2013-03":{"loc":0,"attributed_loc":0},"2013-05":{"loc":249,"attributed_loc":0},"2013-06":{"loc":239,"attributed_loc":0},"2014-09":{"loc":421,"attributed_loc":0},"2014-11":{"loc":9042,"attributed_loc":0},"2014-12":{"loc":6082,"attributed_loc":0},"2015-01":{"loc":14819,"attributed_loc":0},"2015-02":{"loc":20,"attributed_loc":0},"2015-03":{"loc":498,"attributed_loc":0},"2015-04":{"loc":0,"attributed_loc":0},"2015-06":{"loc":0,"attributed_loc":0},"2015-07":{"loc":459,"attributed_loc":0},"2015-08":{"loc":7498,"attributed_loc":0},"2015-09":{"loc":1699,"attributed_loc":0},"2015-10":{"loc":1815,"attributed_loc":0},"2015-11":{"loc":1858,"attributed_loc":0},"2015-12":{"loc":1630,"attributed_loc":0},"2016-01":{"loc":1787,"attributed_loc":0},"2016-02":{"loc":51,"attributed_loc":0},"2016-03":{"loc":620,"attributed_loc":0},"2016-04":{"loc":1234,"attributed_loc":0},"2016-05":{"loc":1227,"attributed_loc":0},"2016-06":{"loc":1865,"attributed_loc":0},"2016-08":{"loc":4472,"attributed_loc":0},"2016-09":{"loc":2525,"attributed_loc":0},"2016-10":{"loc":2599,"attributed_loc":0},"2016-12":{"loc":3465,"attributed_loc":0},"2017-01":{"loc":1387,"attributed_loc":0},"2017-02":{"loc":709,"attributed_loc":0},"2017-03":{"loc":684,"attributed_loc":0},"2017-04":{"loc":1293,"attributed_loc":0},"2017-05":{"loc":1135,"attributed_loc":0},"2017-06":{"loc":1914,"attributed_loc":0},"2017-07":{"loc":294,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":324.0,"flagged_units":0.0,"pre_ai_era_bursts":7.0,"pre_ai_era_measured_loc":67474.0,"pre_ai_era_burst_loc":20586.0,"measured_loc":67474.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":1765.6736418925884,"median_loc_per_hour":75.0,"pr_timed_units":0.0,"excluded_import_loc":7418.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":["418941cb758a12f6ce18ac18c27c177516617937"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":79.0,"flagged_releases":0.0,"max_loc_per_day":3587.2},"findings":[],"evidence":[],"data":{"releases":[{"from":"2.3","to":"2.3.1","loc":95,"days":40.93,"loc_per_day":2.3,"flagged":false},{"from":"2.3.1","to":"2.4","loc":889,"days":126.85,"loc_per_day":7.0,"flagged":false},{"from":"2.4","to":"3.3.6","loc":5402,"days":41.11,"loc_per_day":131.4,"flagged":false},{"from":"3.3.6","to":"3.4.0","loc":2038,"days":2.66,"loc_per_day":765.8,"flagged":false},{"from":"3.4.0","to":"3.4.1","loc":58,"days":4.08,"loc_per_day":14.2,"flagged":false},{"from":"3.4.1","to":"3.4.2","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"3.4.2","to":"3.4.3","loc":126,"days":18.94,"loc_per_day":6.7,"flagged":false},{"from":"3.4.3","to":"3.4.4","loc":761,"days":3.16,"loc_per_day":240.5,"flagged":false},{"from":"3.4.4","to":"3.5.0","loc":99,"days":2.85,"loc_per_day":34.7,"flagged":false},{"from":"3.5.0","to":"3.5.1","loc":257,"days":0.07,"loc_per_day":3587.2,"flagged":false},{"from":"3.5.1","to":"3.5.2","loc":456,"days":7.92,"loc_per_day":57.6,"flagged":false},{"from":"3.5.2","to":"3.5.3","loc":225,"days":6.81,"loc_per_day":33.0,"flagged":false},{"from":"3.5.3","to":"3.5.4","loc":77,"days":1.13,"loc_per_day":68.2,"flagged":false},{"from":"3.5.4","to":"3.5.5","loc":65,"days":0.28,"loc_per_day":229.1,"flagged":false},{"from":"3.5.5","to":"3.5.6","loc":230,"days":0.69,"loc_per_day":335.4,"flagged":false},{"from":"3.5.6","to":"3.5.7","loc":72,"days":2.89,"loc_per_day":24.9,"flagged":false},{"from":"3.5.7","to":"3.5.8","loc":242,"days":3.46,"loc_per_day":70.0,"flagged":false},{"from":"3.5.8","to":"3.5.9","loc":89,"days":0.8,"loc_per_day":110.6,"flagged":false},{"from":"3.5.9","to":"3.6","loc":696,"days":10.82,"loc_per_day":64.3,"flagged":false},{"from":"3.6","to":"3.6.1","loc":41,"days":0.17,"loc_per_day":235.4,"flagged":false},{"from":"3.6.1","to":"3.6.1.3","loc":78,"days":0.91,"loc_per_day":86.0,"flagged":false},{"from":"3.6.1.3","to":"3.6.2","loc":199,"days":5.1,"loc_per_day":39.0,"flagged":false},{"from":"3.6.2","to":"3.6.2.1","loc":39,"days":0.07,"loc_per_day":583.4,"flagged":false},{"from":"3.6.2.1","to":"3.6.3","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"3.6.3","to":"3.6.3.1","loc":853,"days":8.65,"loc_per_day":98.6,"flagged":false},{"from":"3.6.3.1","to":"3.6.3.2","loc":108,"days":2.19,"loc_per_day":49.4,"flagged":false},{"from":"3.6.3.2","to":"3.6.3.3","loc":49,"days":3.17,"loc_per_day":15.4,"flagged":false},{"from":"3.6.3.3","to":"3.6.3.4","loc":16,"days":0.1,"loc_per_day":167.1,"flagged":false},{"from":"3.6.3.4","to":"3.6.4","loc":259,"days":1.8,"loc_per_day":143.6,"flagged":false},{"from":"3.6.4","to":"3.6.4.1","loc":8,"days":1.13,"loc_per_day":7.1,"flagged":false},{"from":"3.6.4.1","to":"3.6.5","loc":327,"days":4.83,"loc_per_day":67.6,"flagged":false},{"from":"3.6.5","to":"3.6.6","loc":226,"days":9.31,"loc_per_day":24.3,"flagged":false},{"from":"3.6.6","to":"3.6.7","loc":238,"days":10.64,"loc_per_day":22.4,"flagged":false},{"from":"3.6.7","to":"3.6.7.1","loc":164,"days":0.46,"loc_per_day":354.2,"flagged":false},{"from":"3.6.7.1","to":"3.6.8","loc":60,"days":2.85,"loc_per_day":21.1,"flagged":false},{"from":"3.6.8","to":"3.6.9","loc":749,"days":3.86,"loc_per_day":193.8,"flagged":false},{"from":"3.6.9","to":"3.7.0","loc":193,"days":7.02,"loc_per_day":27.5,"flagged":false},{"from":"3.7.0","to":"3.7.1","loc":1203,"days":7.91,"loc_per_day":152.2,"flagged":false},{"from":"3.7.1","to":"3.7.2","loc":189,"days":3.88,"loc_per_day":48.7,"flagged":false},{"from":"3.7.2","to":"3.7.2.1","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"3.7.2.1","to":"3.7.3","loc":58,"days":2.13,"loc_per_day":27.2,"flagged":false},{"from":"3.7.3","to":"3.7.4","loc":337,"days":11.17,"loc_per_day":30.2,"flagged":false},{"from":"3.7.4","to":"3.7.4.1","loc":51,"days":9.76,"loc_per_day":5.2,"flagged":false},{"from":"3.7.4.1","to":"4.0.2","loc":0,"days":37.8,"loc_per_day":0.0,"flagged":false},{"from":"4.0.2","to":"4.0.3","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"4.0.3","to":"4.0.4","loc":18175,"days":299.41,"loc_per_day":60.7,"flagged":false},{"from":"4.0.4","to":"4.0.5","loc":314,"days":4.63,"loc_per_day":67.8,"flagged":false},{"from":"4.0.5","to":"4.0.6","loc":469,"days":9.22,"loc_per_day":50.9,"flagged":false},{"from":"4.0.6","to":"4.0.7","loc":60,"days":1.24,"loc_per_day":48.4,"flagged":false},{"from":"4.0.7","to":"4.0.8","loc":26,"days":0.67,"loc_per_day":39.0,"flagged":false},{"from":"4.0.8","to":"4.0.9","loc":268,"days":1.96,"loc_per_day":136.8,"flagged":false},{"from":"4.0.9","to":"4.1.0","loc":82,"days":3.1,"loc_per_day":26.4,"flagged":false},{"from":"4.1.0","to":"4.1.1","loc":672,"days":20.95,"loc_per_day":32.1,"flagged":false},{"from":"4.1.1","to":"4.1.2","loc":37,"days":12.23,"loc_per_day":3.0,"flagged":false},{"from":"4.1.2","to":"4.1.3","loc":281,"days":8.7,"loc_per_day":32.3,"flagged":false},{"from":"4.1.3","to":"4.1.4","loc":70,"days":4.13,"loc_per_day":16.9,"flagged":false},{"from":"4.1.4","to":"4.1.5","loc":333,"days":15.18,"loc_per_day":21.9,"flagged":false},{"from":"4.1.5","to":"4.2.0","loc":1252,"days":31.89,"loc_per_day":39.3,"flagged":false},{"from":"4.2.0","to":"4.2.1","loc":41,"days":1.61,"loc_per_day":25.5,"flagged":false},{"from":"4.2.1","to":"4.2.2","loc":161,"days":5.09,"loc_per_day":31.6,"flagged":false},{"from":"4.2.2","to":"4.2.3","loc":40,"days":1.01,"loc_per_day":39.7,"flagged":false},{"from":"4.2.3","to":"4.3.0","loc":695,"days":9.21,"loc_per_day":75.4,"flagged":false},{"from":"4.3.0","to":"4.3.1","loc":13,"days":0.07,"loc_per_day":178.9,"flagged":false},{"from":"4.3.1","to":"4.4.0","loc":841,"days":19.91,"loc_per_day":42.2,"flagged":false},{"from":"4.4.0","to":"4.4.1","loc":7,"days":0.04,"loc_per_day":168.0,"flagged":false},{"from":"4.4.1","to":"4.4.2","loc":4,"days":0.06,"loc_per_day":62.9,"flagged":false},{"from":"4.4.2","to":"4.4.3","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"4.4.3","to":"4.4.4","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"4.4.4","to":"4.4.5","loc":137,"days":2.69,"loc_per_day":50.9,"flagged":false},{"from":"4.4.5","to":"4.4.6","loc":122,"days":3.02,"loc_per_day":40.4,"flagged":false},{"from":"4.4.6","to":"4.5.0","loc":283,"days":5.19,"loc_per_day":54.5,"flagged":false},{"from":"4.5.0","to":"4.5.1","loc":31,"days":1.89,"loc_per_day":16.4,"flagged":false},{"from":"4.5.1","to":"4.5.2","loc":356,"days":5.14,"loc_per_day":69.3,"flagged":false},{"from":"4.5.2","to":"4.5.3","loc":0,"days":0.04,"loc_per_day":0.0,"flagged":false},{"from":"4.5.3","to":"4.5.4","loc":15,"days":0.82,"loc_per_day":18.2,"flagged":false},{"from":"4.5.4","to":"4.5.5","loc":2,"days":2.09,"loc_per_day":1.0,"flagged":false},{"from":"4.5.5","to":"4.6.0","loc":337,"days":3.01,"loc_per_day":112.1,"flagged":false},{"from":"4.6.0","to":"4.6.1","loc":5,"days":2.07,"loc_per_day":2.4,"flagged":false},{"from":"4.6.1","to":"4.7.0","loc":294,"days":27.98,"loc_per_day":10.5,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":39296.0,"index":0.127,"count:narrated_steps":5.0,"per_kloc:narrated_steps":0.127,"files:narrated_steps":3.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":0.0,"per_kloc:emoji_in_code":0.0,"files:emoji_in_code":0.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, read remainder from current byte","ref":"shadowsocks-csharp/3rd/zxing/common/BitSource.cs:77","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/common/BitSource.cs#L77","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 1.  Divide data bytes into blocks and generate error correction bytes for them. We'll","ref":"shadowsocks-csharp/3rd/zxing/qrcode/encoder/Encoder.cs:388","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/qrcode/encoder/Encoder.cs#L388","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, place data blocks.","ref":"shadowsocks-csharp/3rd/zxing/qrcode/encoder/Encoder.cs:424","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/qrcode/encoder/Encoder.cs#L424","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Then, place error correction blocks.","ref":"shadowsocks-csharp/3rd/zxing/qrcode/encoder/Encoder.cs:436","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/qrcode/encoder/Encoder.cs#L436","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Then, embed the dark dot at the left bottom corner.","ref":"shadowsocks-csharp/3rd/zxing/qrcode/encoder/MatrixUtil.cs:168","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/qrcode/encoder/MatrixUtil.cs#L168","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":1.0},"findings":[{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit 99bdec334c); removed from the current tree but still retrievable","path":"shadowsocks-csharp/View/HotkeySettingsForm.cs","line":119,"fingerprint":"99bdec334cbaeefcfa15694c899a112ca7a44cb6:shadowsocks-csharp/View/HotkeySettingsForm.cs:generic-api-key:119"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":0.0,"findings_high":0.0,"findings_medium":0.0,"findings_low":0.0,"weighted_findings":0.0,"scanned_lines":39296.0,"parse_errors":3.0},"findings":[],"evidence":[],"data":{"rulesets":["csharp","bash"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":1.0,"binary_assets":1.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release 4.7.0 ships ShadowsocksR-4.7.0-win.7z (920250 downloads)","ref":"ShadowsocksR-4.7.0-win.7z","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/releases/download/4.7.0/ShadowsocksR-4.7.0-win.7z","weight":0.0}],"data":{"signals":["binary-release-assets"],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":1325.0,"function_nloc":25843.0,"mean_ccn":3.73,"p90_ccn":8.0,"complex_functions":41.0,"long_functions":26.0,"many_param_functions":7.0,"risky_nloc_share":0.2634},"findings":[],"evidence":[{"kind":"complex-function","description":"PocoJsonSerializerStrategy::BuildMap in shadowsocks-csharp/3rd/SimpleJson.cs: complexity 138, 492 lines","ref":"shadowsocks-csharp/3rd/SimpleJson.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/SimpleJson.cs#L1254","weight":1.0},{"kind":"complex-function","description":"ServerLogForm::RefreshLog in shadowsocks-csharp/View/ServerLogForm.cs: complexity 72, 328 lines","ref":"shadowsocks-csharp/View/ServerLogForm.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/View/ServerLogForm.cs#L282","weight":1.0},{"kind":"complex-function","description":"StringUtils::guessEncoding in shadowsocks-csharp/3rd/zxing/common/StringUtils.cs: complexity 58, 176 lines","ref":"shadowsocks-csharp/3rd/zxing/common/StringUtils.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/common/StringUtils.cs#L52","weight":0.9666666666666667},{"kind":"complex-function","description":"ServerSelectStrategy::SubSelect in shadowsocks-csharp/Model/ServerSelectStrategy.cs: complexity 56, 188 lines","ref":"shadowsocks-csharp/Model/ServerSelectStrategy.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/Model/ServerSelectStrategy.cs#L103","weight":0.9333333333333333},{"kind":"complex-function","description":"Socks5Forwarder::IsHandle in shadowsocks-csharp/Controller/Socks5Forwarder.cs: complexity 42, 147 lines","ref":"shadowsocks-csharp/Controller/Socks5Forwarder.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/Controller/Socks5Forwarder.cs#L51","weight":0.7},{"kind":"complex-function","description":"MenuViewController::updateFreeNodeChecker_NewFreeNodeFound in shadowsocks-csharp/View/MenuViewController.cs: complexity 41, 210 lines","ref":"shadowsocks-csharp/View/MenuViewController.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/View/MenuViewController.cs#L334","weight":0.6833333333333333},{"kind":"complex-function","description":"SimpleJson::NextToken in shadowsocks-csharp/3rd/SimpleJson.cs: complexity 36, 74 lines","ref":"shadowsocks-csharp/3rd/SimpleJson.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/SimpleJson.cs#L885","weight":0.6},{"kind":"complex-function","description":"ProtocolResponseDetector::OnSend in shadowsocks-csharp/Controller/SpeedTest.cs: complexity 36, 34 lines","ref":"shadowsocks-csharp/Controller/SpeedTest.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/Controller/SpeedTest.cs#L151","weight":0.6},{"kind":"complex-function","description":"FinderPatternFinder::crossCheckDiagonal in shadowsocks-csharp/3rd/zxing/qrcode/detector/FinderPatternFinder.cs: complexity 35, 65 lines","ref":"shadowsocks-csharp/3rd/zxing/qrcode/detector/FinderPatternFinder.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/qrcode/detector/FinderPatternFinder.cs#L306","weight":0.5833333333333334},{"kind":"complex-function","description":"Handler::LogSocketException in shadowsocks-csharp/Controller/Local.cs: complexity 34, 117 lines","ref":"shadowsocks-csharp/Controller/Local.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/Controller/Local.cs#L330","weight":0.5666666666666667}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":24279.0,"duplicated_lines":2867.0,"duplicated_share":0.1181,"files":136.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/SimpleJson.cs:70 and shadowsocks-csharp/3rd/SimpleJson.cs:107","ref":"shadowsocks-csharp/3rd/SimpleJson.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/SimpleJson.cs#L70","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/opendns/DnsQuery.cs:2 and shadowsocks-csharp/3rd/opendns/DnsResponse.cs:2","ref":"shadowsocks-csharp/3rd/opendns/DnsQuery.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/opendns/DnsQuery.cs#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/opendns/DnsResponse.cs:5 and shadowsocks-csharp/3rd/opendns/Enum.cs:5","ref":"shadowsocks-csharp/3rd/opendns/DnsResponse.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/opendns/DnsResponse.cs#L5","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/zxing/BarcodeFormat.cs:2 and shadowsocks-csharp/3rd/zxing/DecodeHintType.cs:2","ref":"shadowsocks-csharp/3rd/zxing/BarcodeFormat.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/BarcodeFormat.cs#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/zxing/BarcodeFormat.cs:4 and shadowsocks-csharp/3rd/zxing/BaseLuminanceSource.cs:4","ref":"shadowsocks-csharp/3rd/zxing/BarcodeFormat.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/BarcodeFormat.cs#L4","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/zxing/BaseLuminanceSource.cs:2 and shadowsocks-csharp/3rd/zxing/BitmapLuminanceSource.cs:2","ref":"shadowsocks-csharp/3rd/zxing/BaseLuminanceSource.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/BaseLuminanceSource.cs#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/zxing/Binarizer.cs:2 and shadowsocks-csharp/3rd/zxing/BinaryBitmap.cs:2","ref":"shadowsocks-csharp/3rd/zxing/Binarizer.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/Binarizer.cs#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/zxing/BinaryBitmap.cs:127 and shadowsocks-csharp/3rd/zxing/LuminanceSource.cs:111","ref":"shadowsocks-csharp/3rd/zxing/BinaryBitmap.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/BinaryBitmap.cs#L127","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/zxing/BinaryBitmap.cs:174 and shadowsocks-csharp/3rd/zxing/Result.cs:146","ref":"shadowsocks-csharp/3rd/zxing/BinaryBitmap.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/BinaryBitmap.cs#L174","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: shadowsocks-csharp/3rd/zxing/BitmapLuminanceSource.cs:157 and shadowsocks-csharp/3rd/zxing/BitmapLuminanceSource.cs:171","ref":"shadowsocks-csharp/3rd/zxing/BitmapLuminanceSource.cs","url":"https://github.com/shadowsocksr-backup/shadowsocksr-csharp/blob/932b86ef57836bdb20fa96d88823174b5ecced60/shadowsocks-csharp/3rd/zxing/BitmapLuminanceSource.cs#L157","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":5.0,"weighted_findings":1.25,"scanned_lines":39296.0,"category:best-practice":3.0,"category:correctness":2.0},"findings":[{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"packaging/upload.sh","line":5,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:packaging/upload.sh:5"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"packaging/upload.sh","line":6,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:packaging/upload.sh:6"},{"rule_id":"opengrep/csharp.lang.best-practice.structured-logging","severity":"low","message":"String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging library. This reduces the possibility of log injection and make","path":"shadowsocks-csharp/Controller/Local.cs","line":754,"fingerprint":"csharp.lang.best-practice.structured-logging:shadowsocks-csharp/Controller/Local.cs:754"},{"rule_id":"opengrep/csharp.lang.best-practice.structured-logging","severity":"low","message":"String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging library. This reduces the possibility of log injection and make","path":"shadowsocks-csharp/Controller/Local.cs","line":757,"fingerprint":"csharp.lang.best-practice.structured-logging:shadowsocks-csharp/Controller/Local.cs:757"},{"rule_id":"opengrep/csharp.lang.best-practice.structured-logging","severity":"low","message":"String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging library. This reduces the possibility of log injection and make","path":"shadowsocks-csharp/Controller/Local.cs","line":838,"fingerprint":"csharp.lang.best-practice.structured-logging:shadowsocks-csharp/Controller/Local.cs:838"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.0109,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0141,"test_lines":215.0,"source_lines":39296.0,"test_ratio":0.0055,"ci_files":0.0,"cochange_share":0.0035,"cochange_commits":284.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":1.0,"check:changelog":1.0,"readme_lines":50.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0},{"kind":"docs","description":"CONTRIBUTING.md","ref":"CONTRIBUTING.md","url":null,"weight":0.0},{"kind":"docs","description":"CHANGES","ref":"CHANGES","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}