Skip to content

Commit 1698c3b

Browse files
Merge branch 'main' into smol+async-global-executor-1.80-dev
2 parents c7fa793 + 580b8df commit 1698c3b

File tree

19 files changed

+295
-9
lines changed

19 files changed

+295
-9
lines changed

Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ _unstable-all-types = [
6767
"json",
6868
"time",
6969
"chrono",
70+
"ipnet",
7071
"ipnetwork",
7172
"mac_address",
7273
"uuid",
@@ -121,11 +122,12 @@ sqlite-unbundled = ["_sqlite", "sqlx-sqlite/unbundled", "sqlx-macros?/sqlite-unb
121122
sqlite-preupdate-hook = ["sqlx-sqlite/preupdate-hook"]
122123

123124
# types
124-
json = ["sqlx-macros?/json", "sqlx-mysql?/json", "sqlx-postgres?/json", "sqlx-sqlite?/json"]
125+
json = ["sqlx-core/json", "sqlx-macros?/json", "sqlx-mysql?/json", "sqlx-postgres?/json", "sqlx-sqlite?/json"]
125126

126127
bigdecimal = ["sqlx-core/bigdecimal", "sqlx-macros?/bigdecimal", "sqlx-mysql?/bigdecimal", "sqlx-postgres?/bigdecimal"]
127128
bit-vec = ["sqlx-core/bit-vec", "sqlx-macros?/bit-vec", "sqlx-postgres?/bit-vec"]
128129
chrono = ["sqlx-core/chrono", "sqlx-macros?/chrono", "sqlx-mysql?/chrono", "sqlx-postgres?/chrono", "sqlx-sqlite?/chrono"]
130+
ipnet = ["sqlx-core/ipnet", "sqlx-macros?/ipnet", "sqlx-postgres?/ipnet"]
129131
ipnetwork = ["sqlx-core/ipnetwork", "sqlx-macros?/ipnetwork", "sqlx-postgres?/ipnetwork"]
130132
mac_address = ["sqlx-core/mac_address", "sqlx-macros?/mac_address", "sqlx-postgres?/mac_address"]
131133
rust_decimal = ["sqlx-core/rust_decimal", "sqlx-macros?/rust_decimal", "sqlx-mysql?/rust_decimal", "sqlx-postgres?/rust_decimal"]
@@ -153,6 +155,7 @@ sqlx = { version = "=0.8.3", path = ".", default-features = false }
153155
bigdecimal = "0.4.0"
154156
bit-vec = "0.6.3"
155157
chrono = { version = "0.4.34", default-features = false, features = ["std", "clock"] }
158+
ipnet = "2.3.0"
156159
ipnetwork = "0.20.0"
157160
mac_address = "1.1.5"
158161
rust_decimal = { version = "1.26.1", default-features = false, features = ["std"] }

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,8 @@ be removed in the future.
220220

221221
- `rust_decimal`: Add support for `NUMERIC` using the `rust_decimal` crate.
222222

223+
- `ipnet`: Add support for `INET` and `CIDR` (in postgres) using the `ipnet` crate.
224+
223225
- `ipnetwork`: Add support for `INET` and `CIDR` (in postgres) using the `ipnetwork` crate.
224226

225227
- `json`: Add support for `JSON` and `JSONB` (in postgres) using the `serde_json` crate.

sqlx-core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ bit-vec = { workspace = true, optional = true }
5757
bigdecimal = { workspace = true, optional = true }
5858
rust_decimal = { workspace = true, optional = true }
5959
time = { workspace = true, optional = true }
60+
ipnet = { workspace = true, optional = true }
6061
ipnetwork = { workspace = true, optional = true }
6162
mac_address = { workspace = true, optional = true }
6263
uuid = { workspace = true, optional = true }

sqlx-core/src/types/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ pub use bigdecimal::BigDecimal;
6767
#[doc(no_inline)]
6868
pub use rust_decimal::Decimal;
6969

70+
#[cfg(feature = "ipnet")]
71+
#[cfg_attr(docsrs, doc(cfg(feature = "ipnet")))]
72+
pub mod ipnet {
73+
#[doc(no_inline)]
74+
pub use ipnet::{IpNet, Ipv4Net, Ipv6Net};
75+
}
76+
7077
#[cfg(feature = "ipnetwork")]
7178
#[cfg_attr(docsrs, doc(cfg(feature = "ipnetwork")))]
7279
pub mod ipnetwork {

sqlx-macros-core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ json = ["sqlx-core/json", "sqlx-mysql?/json", "sqlx-postgres?/json", "sqlx-sqlit
4040
bigdecimal = ["sqlx-core/bigdecimal", "sqlx-mysql?/bigdecimal", "sqlx-postgres?/bigdecimal"]
4141
bit-vec = ["sqlx-core/bit-vec", "sqlx-postgres?/bit-vec"]
4242
chrono = ["sqlx-core/chrono", "sqlx-mysql?/chrono", "sqlx-postgres?/chrono", "sqlx-sqlite?/chrono"]
43+
ipnet = ["sqlx-core/ipnet", "sqlx-postgres?/ipnet"]
4344
ipnetwork = ["sqlx-core/ipnetwork", "sqlx-postgres?/ipnetwork"]
4445
mac_address = ["sqlx-core/mac_address", "sqlx-postgres?/mac_address"]
4546
rust_decimal = ["sqlx-core/rust_decimal", "sqlx-mysql?/rust_decimal", "sqlx-postgres?/rust_decimal"]

sqlx-macros/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ sqlite-unbundled = ["sqlx-macros-core/sqlite-unbundled"]
3939
bigdecimal = ["sqlx-macros-core/bigdecimal"]
4040
bit-vec = ["sqlx-macros-core/bit-vec"]
4141
chrono = ["sqlx-macros-core/chrono"]
42+
ipnet = ["sqlx-macros-core/ipnet"]
4243
ipnetwork = ["sqlx-macros-core/ipnetwork"]
4344
mac_address = ["sqlx-macros-core/mac_address"]
4445
rust_decimal = ["sqlx-macros-core/rust_decimal"]

sqlx-mysql/src/protocol/text/row.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,20 @@ impl<'de> ProtocolDecode<'de, &'de [MySqlColumn]> for TextRow {
1616

1717
let mut values = Vec::with_capacity(columns.len());
1818

19-
for _ in columns {
19+
for c in columns {
2020
if buf[0] == 0xfb {
2121
// NULL is sent as 0xfb
2222
values.push(None);
2323
buf.advance(1);
2424
} else {
2525
let size = buf.get_uint_lenenc();
26+
if (buf.remaining() as u64) < size {
27+
return Err(err_protocol!(
28+
"buffer exhausted when reading data for column {:?}; decoded length is {}, but only {} bytes remain in buffer. Malformed packet or protocol error?",
29+
c,
30+
size,
31+
buf.remaining()));
32+
}
2633
let size = usize::try_from(size)
2734
.map_err(|_| err_protocol!("TextRow length out of range: {size}"))?;
2835

sqlx-postgres/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ offline = ["sqlx-core/offline"]
1919
bigdecimal = ["dep:bigdecimal", "dep:num-bigint", "sqlx-core/bigdecimal"]
2020
bit-vec = ["dep:bit-vec", "sqlx-core/bit-vec"]
2121
chrono = ["dep:chrono", "sqlx-core/chrono"]
22+
ipnet = ["dep:ipnet", "sqlx-core/ipnet"]
2223
ipnetwork = ["dep:ipnetwork", "sqlx-core/ipnetwork"]
2324
mac_address = ["dep:mac_address", "sqlx-core/mac_address"]
2425
rust_decimal = ["dep:rust_decimal", "rust_decimal/maths", "sqlx-core/rust_decimal"]
@@ -43,6 +44,7 @@ sha2 = { version = "0.10.0", default-features = false }
4344
bigdecimal = { workspace = true, optional = true }
4445
bit-vec = { workspace = true, optional = true }
4546
chrono = { workspace = true, optional = true }
47+
ipnet = { workspace = true, optional = true }
4648
ipnetwork = { workspace = true, optional = true }
4749
mac_address = { workspace = true, optional = true }
4850
rust_decimal = { workspace = true, optional = true }

sqlx-postgres/src/type_checking.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ impl_type_checking!(
8888
#[cfg(feature = "ipnetwork")]
8989
sqlx::types::ipnetwork::IpNetwork,
9090

91+
#[cfg(feature = "ipnet")]
92+
sqlx::types::ipnet::IpNet,
93+
9194
#[cfg(feature = "mac_address")]
9295
sqlx::types::mac_address::MacAddress,
9396

@@ -149,6 +152,9 @@ impl_type_checking!(
149152
#[cfg(feature = "ipnetwork")]
150153
Vec<sqlx::types::ipnetwork::IpNetwork> | &[sqlx::types::ipnetwork::IpNetwork],
151154

155+
#[cfg(feature = "ipnet")]
156+
Vec<sqlx::types::ipnet::IpNet> | &[sqlx::types::ipnet::IpNet],
157+
152158
#[cfg(feature = "mac_address")]
153159
Vec<sqlx::types::mac_address::MacAddress> | &[sqlx::types::mac_address::MacAddress],
154160

sqlx-postgres/src/types/geometry/point.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ impl FromStr for PgPoint {
7777
.ok_or_else(|| format!("error decoding POINT: could not get x and y from {}", s))?;
7878

7979
let x = parse_float_from_str(x_str, "error decoding POINT: could not get x")?;
80-
let y = parse_float_from_str(y_str, "error decoding POINT: could not get x")?;
80+
let y = parse_float_from_str(y_str, "error decoding POINT: could not get y")?;
8181

8282
Ok(PgPoint { x, y })
8383
}

0 commit comments

Comments
 (0)