sysutils/flowgger: Unbreak build with Rust 1.40.0 (D22843)
error[E0713]: borrow may still be in use when destructor runs
--> .../cargo-crates/url-1.5.1/src/form_urlencoded.rs:251:40
|
249 | impl<'a> Target for ::UrlQuery<'a> {
| -- lifetime `'a` defined here
250 | fn as_mut_string(&mut self) -> &mut String { &mut self.url.serialization }
251 | fn finish(self) -> &'a mut ::Url { self.url }
| ^^^^^^^^ - here, drop of `self` needs exclusive access to `*self.url`, because the type `UrlQuery<'_>` implements the `Drop` trait
| |
| returning this value requires that `*self.url` is borrowed for `'a`
error: aborting due to previous error
This commit is contained in:
55
sysutils/flowgger/files/patch-rust-1.40.0
Normal file
55
sysutils/flowgger/files/patch-rust-1.40.0
Normal file
@@ -0,0 +1,55 @@
|
||||
From 2efa106431e6fb15b73478f67e37cb307bac2be6 Mon Sep 17 00:00:00 2001
|
||||
From: Simon Sapin <simon.sapin@exyr.org>
|
||||
Date: Wed, 4 Jul 2018 22:18:36 +0200
|
||||
Subject: [PATCH] Fix a lifetime bug uncovered by NLL, thanks @lqd
|
||||
|
||||
--- cargo-crates/url-1.5.1/src/form_urlencoded.rs.orig 2017-06-25 04:39:47 UTC
|
||||
+++ cargo-crates/url-1.5.1/src/form_urlencoded.rs
|
||||
@@ -247,8 +247,16 @@ impl<'a> Target for &'a mut String {
|
||||
// * `Serializer` keeps its target in a private field
|
||||
// * Unlike in other `Target` impls, `UrlQuery::finished` does not return `Self`.
|
||||
impl<'a> Target for ::UrlQuery<'a> {
|
||||
- fn as_mut_string(&mut self) -> &mut String { &mut self.url.serialization }
|
||||
- fn finish(self) -> &'a mut ::Url { self.url }
|
||||
+ fn as_mut_string(&mut self) -> &mut String {
|
||||
+ &mut self.url.as_mut().unwrap().serialization
|
||||
+ }
|
||||
+
|
||||
+ fn finish(mut self) -> &'a mut ::Url {
|
||||
+ let url = self.url.take().unwrap();
|
||||
+ url.restore_already_parsed_fragment(self.fragment.take());
|
||||
+ url
|
||||
+ }
|
||||
+
|
||||
type Finished = &'a mut ::Url;
|
||||
}
|
||||
|
||||
--- cargo-crates/url-1.5.1/src/lib.rs.orig 2017-06-25 04:39:47 UTC
|
||||
+++ cargo-crates/url-1.5.1/src/lib.rs
|
||||
@@ -1283,7 +1283,7 @@ impl Url {
|
||||
self.serialization.push('?');
|
||||
}
|
||||
|
||||
- let query = UrlQuery { url: self, fragment: fragment };
|
||||
+ let query = UrlQuery { url: Some(self), fragment: fragment };
|
||||
form_urlencoded::Serializer::for_suffix(query, query_start + "?".len())
|
||||
}
|
||||
|
||||
@@ -2347,13 +2347,15 @@ fn io_error<T>(reason: &str) -> io::Result<T> {
|
||||
/// Implementation detail of `Url::query_pairs_mut`. Typically not used directly.
|
||||
#[derive(Debug)]
|
||||
pub struct UrlQuery<'a> {
|
||||
- url: &'a mut Url,
|
||||
+ url: Option<&'a mut Url>,
|
||||
fragment: Option<String>,
|
||||
}
|
||||
|
||||
impl<'a> Drop for UrlQuery<'a> {
|
||||
fn drop(&mut self) {
|
||||
- self.url.restore_already_parsed_fragment(self.fragment.take())
|
||||
+ if let Some(url) = self.url.take() {
|
||||
+ url.restore_already_parsed_fragment(self.fragment.take())
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user