All Projects → briansmith → Untrusted

briansmith / Untrusted

Licence: other
Safe, fast, zero-panic, zero-crashing, zero-allocation parsing of untrusted inputs in Rust.

Programming Languages

rust
11053 projects

Labels

Projects that are alternatives of or similar to Untrusted

Importjson
Import JSON into Google Sheets, this library adds various ImportJSON functions to your spreadsheet
Stars: ✭ 1,705 (+1181.95%)
Mutual labels:  parsing
Dateutil
Useful extensions to the standard Python datetime features
Stars: ✭ 1,706 (+1182.71%)
Mutual labels:  parsing
Parser
Simple Parser + Nice Error Messages
Stars: ✭ 125 (-6.02%)
Mutual labels:  parsing
Stacktracey
Parses call stacks. Reads sources. Clean & filtered output. Sourcemaps. Node & browsers.
Stars: ✭ 115 (-13.53%)
Mutual labels:  parsing
Svg
Composer and parser for SVG
Stars: ✭ 119 (-10.53%)
Mutual labels:  parsing
Master Plan
Project Management for Hackers
Stars: ✭ 121 (-9.02%)
Mutual labels:  parsing
Antlr4
ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files.
Stars: ✭ 11,227 (+8341.35%)
Mutual labels:  parsing
Alma
ALgoloid with MAcros -- a language with Algol-family syntax where macros take center stage
Stars: ✭ 132 (-0.75%)
Mutual labels:  parsing
Py Pdf Parser
A Python tool to help extracting information from structured PDFs.
Stars: ✭ 120 (-9.77%)
Mutual labels:  parsing
Dan Jurafsky Chris Manning Nlp
My solution to the Natural Language Processing course made by Dan Jurafsky, Chris Manning in Winter 2012.
Stars: ✭ 124 (-6.77%)
Mutual labels:  parsing
Chordsheetjs
A JavaScript library for parsing and formatting ChordPro chord sheets
Stars: ✭ 114 (-14.29%)
Mutual labels:  parsing
Formatfuzzer
FormatFuzzer is a framework for high-efficiency, high-quality generation and parsing of binary inputs.
Stars: ✭ 117 (-12.03%)
Mutual labels:  parsing
Whois Parser
Go(Golang) module for domain whois information parsing.
Stars: ✭ 123 (-7.52%)
Mutual labels:  parsing
Expressive
Expressive is a cross-platform expression parsing and evaluation framework. The cross-platform nature is achieved through compiling for .NET Standard so it will run on practically any platform.
Stars: ✭ 113 (-15.04%)
Mutual labels:  parsing
Grammophone
A tool for analyzing and transforming context-free grammars.
Stars: ✭ 126 (-5.26%)
Mutual labels:  parsing
Sywac
🚫 🐭 Asynchronous, single package CLI framework for Node
Stars: ✭ 109 (-18.05%)
Mutual labels:  parsing
Cherow
Very fast and lightweight, standards-compliant, self-hosted javascript parser with high focus on both performance and stability
Stars: ✭ 1,539 (+1057.14%)
Mutual labels:  parsing
Govaluate
Arbitrary expression evaluation for golang
Stars: ✭ 2,130 (+1501.5%)
Mutual labels:  parsing
Coregpx
A library for parsing and creation of GPX location files. Purely Swift.
Stars: ✭ 132 (-0.75%)
Mutual labels:  parsing
Chevrotain
Parser Building Toolkit for JavaScript
Stars: ✭ 1,795 (+1249.62%)
Mutual labels:  parsing

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

untrusted.rs

Safe, fast, zero-panic, zero-crashing, zero-allocation parsing of untrusted inputs in Rust.

untrusted.rs is 100% Rust with no use of unsafe. It never uses the heap. No part of untrusted.rs's API will ever panic or cause a crash. It is #![no_std] and so it works perfectly with both libcore- and libstd- based projects. It does not depend on any crates other than libcore.

untrusted.rs is intended to be used with the latest version of Rust Stable. It should usually work with the latest Rust Beta and Rust Nightly versions too. Using a version of untrusted.rs other than the latest release available on crates.io is not recommended.

Documentation

See the documentation at https://briansmith.org/rustdoc/untrusted/.

To use untrusted.rs in your project, add a dependency to your Cargo.toml like this:

[dependencies]
untrusted = "0.2"

Examples

ring's parser for the subset of ASN.1 DER it needs to understand, ring::der, is built on top of untrusted.rs. ring also uses untrusted.rs to parse ECC public keys, RSA PKCS#1 1.5 padding, and everything else.

All of webpki's parsing of X.509 certificates (also ASN.1 DER) is done using untrusted.rs.

Contributing

Patches welcome!

When contributing changes, state that you agree to license your contribution under the same terms as the existing code by putting this at the bottom of your commit message:


I agree to license my contributions to each file under the terms given
at the top of each file I changed.

Currently, the biggest needs for this library are:

  • Unit tests.
  • Documentation.
  • More examples.
  • Static analysis and fuzzing.

Online Automated Testing

Travis CI is used for Android, Linux, and Mac OS X. The tests are run for the current release of each Rust channel (Stable, Beta, Nightly). Since untrusted.rs only depends on libcore and it only uses 100% cross-platform code without using unsafe, it should work anywhere as long as these platforms are passing.

<img src=https://travis-ci.org/briansmith/untrusted.svg?branch=master>

Bug Reporting

Please report bugs either as pull requests or as issues in the issue tracker. untrusted.rs has a full disclosure vulnerability policy. Please do NOT attempt to report any security vulnerability in this code privately to anybody.

License

See LICENSE.txt, an ISC-style (simplified MIT) license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].