This website requires JavaScript.
Explore
Help
Sign In
danog
/
ext-php-rs
Watch
1
Star
0
Fork
0
You've already forked ext-php-rs
mirror of
https://github.com/danog/ext-php-rs.git
synced
2024-12-14 18:15:26 +01:00
Code
Issues
Packages
Projects
Releases
Wiki
Activity
94fb7c78a1
ext-php-rs
/
.gitignore
6 lines
49 B
Plaintext
Raw
Normal View
History
Unescape
Escape
initial commit added php wrapper
2021-03-09 00:40:12 +01:00
/target
Cargo.lock
added info table headers infotable class is deprecated
2021-03-09 04:28:37 +01:00
/.vscode
Added CLI crate for stubs, installation and removal (#107) * started work on stub generator * Worked on stub CLI tool * Unused import * Account for namespaces in function and class names * Add support for docblocks on structs * Push Rust comments to stubs * Add indentation to stub generation * Add CLI application to install and generate stubs This time CLI application is defined on user side, called with `cargo run -- ..args..` * Export anyhow result * Add constants to stub file * Removed stub symbols No longer required as we are now building while also linking to PHP. Keeping the stubs causes the stubs to override the real symbols in the extension. * Fix stubs for real this time Removed stub symbols as they were being included in the extension dylib, fix by loading the PHP executable as a dylib, loading the required symbols globally. * Maybe actually fix stubs this time * Forgot to remove PHP binary loading * let's give this another go... cargo subcommand Now called via `cargo php <install,stubs>`. * Added `remove` command * Tidied up cargo-php, commented, set up CI * Fix return types with non-ident types * define namespace ordering * Fix tests, replace `Self` when in outer context * Moved allowed bindings into separate file * Update guide with CLI instructions
2021-11-20 02:19:02 +01:00
/.idea
feat: allows ZendStr to contain null bytes (#202) Closes https://github.com/davidcole1340/ext-php-rs/issues/200 ## Rationale In PHP zend_strings are binary strings with no encoding information. They can contain any byte at any position. The current implementation use `CString` to transfer zend_strings between Rust and PHP, which prevents zend_strings containing null-bytes to roundtrip through the ffi layer. Moreover, `ZendStr::new()` accepts only a `&str`, which is incorrect since a zend_string is not required to be valid UTF8. When reading the PHP source code, it is apparent that most functions marked with `ZEND_API` that accept a `const *char` are convenience wrappers that convert the `const *char` to a zend_string and delegate to another function. For example [zend_throw_exception()](https://github.com/php/php-src/blob/eb83e0206c9b9261d786943bf2c5ad61dca287e2/Zend/zend_exceptions.c#L823) takes a `const *char message`, and just converts it to a zend_string before delegating to [zend_throw_exception_zstr()](https://github.com/php/php-src/blob/eb83e0206c9b9261d786943bf2c5ad61dca287e2/Zend/zend_exceptions.c#L795). I kept this PR focused around `ZendStr` and it's usages in the library, but it should be seen as the first step of a more global effort to remove usages of `CString` everywhere possible. Also, I didn't change the return type of the string related methods of `Zval` (e.g. I could have made `Zval::set_string()` accept an `impl AsRef<[u8]>` instead of `&str` and return `()` instead of `Result<()>`). If I get feedback that it should be done in this PR, I'll do it. ## Summary of the changes: ### ZendStr * [BC break]: `ZendStr::new()` and `ZendStr::new_interned()` now accept an `impl AsRef<[u8]>` instead of just `&str`, and are therefore infaillible (outside of the cases where we panic, e.g. when allocation fails). This is a BC break, but it's impact shouldn't be huge (users will most likely just have to remove a bunch of `?` or add a few `Ok()`). * [BC break]: Conversely, `ZendStr::as_c_str()` now returns a `Result<&CStr>` since it can fail on strings containing null bytes. * [BC break]: `ZensStr::as_str()` now returns a `Result<&str>` instead of an `Option<&str>` since we have to return an error in case of invalid UTF8. * adds method `ZendStr::as_bytes()` to return the underlying byte slice. * adds convenience methods `ZendStr::as_ptr()` and `ZendStr::as_mut_ptr()` to return raw pointers to the zend_string. ### ZendStr conversion traits * adds `impl AsRef<[u8]> for ZendStr` * [BC break]: replaces `impl TryFrom<String> for ZBox<ZendStr>` by `impl From<String> for ZBox<ZendStr>`. * [BC break]: replaces `impl TryFrom<&str> for ZBox<ZendStr>` by `impl From<&str> for ZBox<ZendStr>`. * [BC break]: replaces `impl From<&ZendStr> for &CStr` by `impl TryFrom<&ZendStr> for &CStr`. ### Error * adds new enum member `Error::InvalidUtf8` used when converting a `ZendStr` to `String` or `&str`
2022-12-09 10:54:17 +01:00
/tmp
expand.rs
Reference in New Issue
Copy Permalink