{"id":23252260,"url":"https://github.com/janislley/LSVerifier","last_synced_at":"2025-08-20T10:33:19.667Z","repository":{"id":57426927,"uuid":"302776818","full_name":"janislley/LSVerifier","owner":"janislley","description":"LSVerifier - Large Systems Verifier","archived":false,"fork":false,"pushed_at":"2024-04-08T12:52:44.000Z","size":23492,"stargazers_count":11,"open_issues_count":2,"forks_count":3,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-12-14T20:19:49.287Z","etag":null,"topics":["bounded-model-checking","c-language","formal-verification","model-checking","open-source-software","security-vulnerabilities","software-verification"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/janislley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-10-09T23:51:57.000Z","updated_at":"2024-10-23T20:50:17.000Z","dependencies_parsed_at":"2023-09-24T22:12:50.164Z","dependency_job_id":"63a2384a-087c-403c-a2ee-6e1c2dbd37be","html_url":"https://github.com/janislley/LSVerifier","commit_stats":null,"previous_names":["thalestas/esbmc-wr","janislley/lsverifier"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janislley%2FLSVerifier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janislley%2FLSVerifier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janislley%2FLSVerifier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janislley%2FLSVerifier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/janislley","download_url":"https://codeload.github.com/janislley/LSVerifier/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230415338,"owners_count":18222159,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bounded-model-checking","c-language","formal-verification","model-checking","open-source-software","security-vulnerabilities","software-verification"],"created_at":"2024-12-19T10:14:21.062Z","updated_at":"2025-08-20T10:33:19.659Z","avatar_url":"https://github.com/janislley.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LSVerifier\n\n[![PyPI version](https://img.shields.io/pypi/v/lsverifier.svg)](https://pypi.org/project/lsverifier/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Python](https://img.shields.io/badge/Python-3.6+-blue.svg)](https://www.python.org/)\n\nLSVerifier is a command-line tool for formal verification of large ANSI-C projects in a single run. \n\nIt leverages the [ESBMC](https://github.com/esbmc/esbmc) model checker as its core verification engine.\n\nDemo [video](https://www.youtube.com/watch?v=LrGwp00pSLc).\n\n## Architecture Overview\n\nThe diagram below summarizes the LSVerifier verification workflow:\n\n![LSVerifier Architecture](https://github.com/janislley/LSVerifier/blob/main/lsverifier/docs/lsverifier_architecture.png)\n\n**Workflow Steps:**\n\n1. **Input**: Project source code (C files).\n2. **Preprocessing**: Parses function listings and configures library dependencies (if any).\n3. **Function Prioritization** *(optional)*: Orders verification by risk/importance.\n4. **Model Checking**: Each function is analyzed via **ESBMC**.\n5. **Result Generation**: Logs and reports verification outcomes.\n\n## Version\n\n| Version | Improvements |\n|---------|--------------|\n| v0.4.0  | Support ESBMC v7.10, improved symbolic modeling of thread-local globals and data race detection, and introduced support for termination analysis to detect non-terminating loops in C programs. |\n| v0.3.0  | Support specific class of property verification; Support for large software; Prioritized functions verification, Disable invalid pointer verification. |\n| v0.2.0  | Support for libraries dependencies; Recursive verification. |\n\n## Requirements\n\n[Ctags](https://github.com/universal-ctags/ctags) is required to use LSVerifier.\n\n## Installation\n\n#### Install LSVerifier\n\n##### From repository\n\n1. Clone the repository:\n\n```\n$ git clone https://github.com/janislley/lsverifier.git\n```\n\n2. Install using pip:\n\n```\n$ cd LSVerifier\n$ pip3 install .\n```\n\n##### From Pypi\n\n```\n$ pip3 install lsverifier\n```\n\n## Usage\n\n#### 1. Verify a project\n```\n$ cd \u003cproject-root\u003e\n$ lsverifier -r -f\n```\n\nFor projects with third-party library dependencies, use ```-l``` option to specify header paths:\n\n```\n$ lsverifier -r -f -l dep.txt\n```\n\nSee an example of ```dep.txt``` below:\n\n```\n  /usr/include/glib-2.0/\n  /usr/lib/x86_64-linux-gnu/glib-2.0/include/extcap/\n  extcap/\n  plugins/epan/ethercat/\n  plugins/epan/falco_bridge/\n  plugins/epan/wimaxmacphy/\n  epan/crypt/\n  ...\n```\n\n#### 2. Verify a single C file\n\n```\n$ lsverifier -f -fl file.c\n```\n\n#### 3. Verify C files using a priorization algorithm\n\nIf you want to verify a project using a prioritization scheme, run:\n\n```\n$ cd \u003cproject-root\u003e\n$ lsverifier -r -fp\n```\n\n#### 4. Verify an entire project by providing the folder path as an argument\n\nTo set the folder path parameter, you should use ```-d```:\n\n```\nlsverifier -r -f -l dep.txt -d project-root/\n```\n\n#### 5. Verify C files using a predefined class of properties\n\nIn the project that you want to verify, run:\n\n```\n$ lsverifier -r -f -p memory-leak-check,overflow-check,deadlock-check,data-races-check\n```\n\nSee more properties on tool help.\n\n#### 6. LSVerifier help\n\nFor more details, check the help:\n\n```\n$ lsverifier -h\n\nusage: lsverifier [-h] [-l LIBRARIES] [-p PROPERTIES] [-f] [-fp] [-fl FILE] [-v] [-r] [-d DIRECTORY] [-dp] [-e ESBMC_PARAMETER]\n\nInput Options\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -l,--libraries LIBRARIES\n                        Path to the file that describes the libraries' dependencies\n  -p,--properties PROPERTIES\n                        Properties to be verified (comma separated):\n                        multi-property\n                        nan-check\n                        memory-leak-check\n                        floatbv\n                        overflow-check\n                        unsigned-overflow-check\n                        ub-shift-check\n                        struct-fields-check\n                        deadlock-check\n                        data-races-check\n                        lock-order-check\n  -f, --functions       Enable Functions Verification\n  -fp, --function-prioritized\n                        Enable Prioritized Functions Verification\n  -fl,--file FILE       File to be verified\n  -v, --verbose         Enable Verbose Output\n  -r, --recursive       Enable Recursive Verification\n  -d,--directory DIRECTORY\n                        Set the directory to be verified\n  -dp, --disable-pointer-check\n                        Disable invalid pointer property verification\n  -e,--esbmc-parameter ESBMC_PARAMETER\n                        Use ESBMC parameter\n```\n\n## Verification report\n\nThe verification results will be saved in ```output``` folder, automatically created in the current verification path. Each verification run generates two files:\n\n- lsverifier-**DATE**.log: Contains the verification output log.\n- lsverifier-**DATE**.csv: Contains the verification results in CSV format.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanislley%2FLSVerifier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjanislley%2FLSVerifier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanislley%2FLSVerifier/lists"}