#Weird Ownership problem in include_crypt

4 messages · Page 1 of 1 (latest)

sleek escarp
#

I'm trying to update include_crypt crate which is very old and all of the libraries have update it was going crate until I solve the last error and a bunch of errors happened suddenly here is the code:

pub enum EncryptionType {
    Xor(&'static str),
    Aes(&'static str, &'static str),
}

pub struct EncryptedFile {
    buffer: &'static [u8],
    enc_type: EncryptionType,
}
#[proc_macro]
pub fn encrypt_xor(input: TokenStream) -> TokenStream {
    match xor::impl_encrypt_xor(input) {
        Ok(ts) => ts,
        Err(err) => err.to_compile_error().into(),
    }
}
#[doc(hidden)]
pub(crate) fn impl_encrypt_xor(input: TokenStream) -> syn::Result<TokenStream> {
    let args: FileArgs = syn::parse(input)?;
    let mut file = read_file(&args.file_path)?;
    xor(file.as_mut_slice(), &args.key);
    let bytes = syn::LitByteStr::new(&file, proc_macro2::Span::call_site());
    let key = args.key.as_str();
    Ok(quote::quote!((include_crypt::obfstr::obfstr!(#key), #bytes)).into())
}
#
#[macro_export]
macro_rules! include_crypt {
    (XOR, $path:expr) => {{
        let (key, data) = $crate::codegen::encrypt_xor!($path);

        $crate::EncryptedFile::new(data, $crate::EncryptionType::Xor(key))
    }};
    (XOR, $path:expr, $key:expr) => {{
        let (key, data) = $crate::codegen::encrypt_xor!($path, $key);

        $crate::EncryptedFile::new(data, $crate::EncryptionType::Xor(key))
    }};

    (AES, $path:expr) => {{
        let (key, nonce, data) = $crate::codegen::encrypt_aes!($path);

        $crate::EncryptedFile::new(data, $crate::EncryptionType::Aes(key, nonce))
    }};
    (AES, $path:expr, $key:expr) => {{
        let (key, nonce, data) = $crate::codegen::encrypt_aes!($path, $key);

        $crate::EncryptedFile::new(data, $crate::EncryptionType::Aes(key, nonce))
    }};

    ($path:expr) => {
        $crate::include_crypt!(XOR, $path)
    };
    ($path:expr, $key:expr) => {
        $crate::include_crypt!(XOR, $path, $key)
    };
}
#
error: temporary value dropped while borrowed
creates a temporary value which is freed while still in use
#

error happened at $crate::codegen::encrypt_xor!($path) and $crate::codegen::encrypt_xor!($path, $key)