aboutsummaryrefslogtreecommitdiff
path: root/rust
diff options
context:
space:
mode:
authorDavid Benjamin <davidben@google.com>2024-02-14 18:15:23 -0500
committerBoringssl LUCI CQ <boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com>2024-02-15 17:54:24 +0000
commitd7f5e18b9f33466769c290b7190d1c5dbc41236e (patch)
treed80cd28a33d088717b7e309139751fc7c1e4f2f4 /rust
parent9c20a89bebe9d0ee4175388c0f07b0652600c59f (diff)
downloadboringssl-d7f5e18b9f33466769c290b7190d1c5dbc41236e.zip
boringssl-d7f5e18b9f33466769c290b7190d1c5dbc41236e.tar.gz
boringssl-d7f5e18b9f33466769c290b7190d1c5dbc41236e.tar.bz2
Work around bindgen bug around constants
Due to https://github.com/rust-lang/rust-bindgen/issues/923, bindgen does not evaluate constants correctly. This means arithemetic is done with the wrong type, and more importantly the output has the wrong type. Ultimately, this is a bug in bindgen, but as that's remains unfixed, we'll have to work around it. rust-openssl's bindgen mode works around this by using the build.rs bindgen driver and registering a callback to fix the type. This won't work for some of our consumers, which require a hermetic and reproducible builds. Instead, apply bssl-sys's workaround at the lib.rs level. This removes a divergence between bssl-sys and rust-openssl's bindgen mode. Fixing these types does not mean we recommending using all of these constants! Many of the options here are ill-defined or produce even more ambiguous output than most. XN_FLAG_COMPAT is especially fun because it change the calling convention! The only option anyone should use is XN_FLAG_RFC2253, as that's at least a well-defined output. Fixed: 636 Change-Id: Id34b4a46e0cfd6dcb275477d9bb915bda66c787d Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/66228 Reviewed-by: Bob Beck <bbe@google.com> Commit-Queue: David Benjamin <davidben@google.com>
Diffstat (limited to 'rust')
-rw-r--r--rust/bssl-sys/src/lib.rs39
1 files changed, 37 insertions, 2 deletions
diff --git a/rust/bssl-sys/src/lib.rs b/rust/bssl-sys/src/lib.rs
index 718509e..9edbd08 100644
--- a/rust/bssl-sys/src/lib.rs
+++ b/rust/bssl-sys/src/lib.rs
@@ -2,8 +2,43 @@
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
-// Set in build.rs
-include!(env!("BINDGEN_RS_FILE"));
+use core::ffi::c_ulong;
+
+// Wrap the bindgen output in a module and re-export it, so we can override it
+// as needed.
+mod bindgen {
+ include!(env!("BINDGEN_RS_FILE"));
+}
+pub use bindgen::*;
+
+// bindgen does not handle C constants correctly. See
+// https://github.com/rust-lang/rust-bindgen/issues/923. Work around this bug by
+// redefining some constants with the correct type. Once the bindgen bug has
+// been fixed, remove this.
+pub const ASN1_STRFLGS_ESC_2253: c_ulong = bindgen::ASN1_STRFLGS_ESC_2253 as c_ulong;
+pub const ASN1_STRFLGS_ESC_CTRL: c_ulong = bindgen::ASN1_STRFLGS_ESC_CTRL as c_ulong;
+pub const ASN1_STRFLGS_ESC_MSB: c_ulong = bindgen::ASN1_STRFLGS_ESC_MSB as c_ulong;
+pub const ASN1_STRFLGS_ESC_QUOTE: c_ulong = bindgen::ASN1_STRFLGS_ESC_QUOTE as c_ulong;
+pub const ASN1_STRFLGS_UTF8_CONVERT: c_ulong = bindgen::ASN1_STRFLGS_UTF8_CONVERT as c_ulong;
+pub const ASN1_STRFLGS_IGNORE_TYPE: c_ulong = bindgen::ASN1_STRFLGS_IGNORE_TYPE as c_ulong;
+pub const ASN1_STRFLGS_SHOW_TYPE: c_ulong = bindgen::ASN1_STRFLGS_SHOW_TYPE as c_ulong;
+pub const ASN1_STRFLGS_DUMP_ALL: c_ulong = bindgen::ASN1_STRFLGS_DUMP_ALL as c_ulong;
+pub const ASN1_STRFLGS_DUMP_UNKNOWN: c_ulong = bindgen::ASN1_STRFLGS_DUMP_UNKNOWN as c_ulong;
+pub const ASN1_STRFLGS_DUMP_DER: c_ulong = bindgen::ASN1_STRFLGS_DUMP_DER as c_ulong;
+pub const ASN1_STRFLGS_RFC2253: c_ulong = bindgen::ASN1_STRFLGS_RFC2253 as c_ulong;
+pub const XN_FLAG_COMPAT: c_ulong = bindgen::XN_FLAG_COMPAT as c_ulong;
+pub const XN_FLAG_SEP_MASK: c_ulong = bindgen::XN_FLAG_SEP_MASK as c_ulong;
+pub const XN_FLAG_SEP_COMMA_PLUS: c_ulong = bindgen::XN_FLAG_SEP_COMMA_PLUS as c_ulong;
+pub const XN_FLAG_SEP_CPLUS_SPC: c_ulong = bindgen::XN_FLAG_SEP_CPLUS_SPC as c_ulong;
+pub const XN_FLAG_SEP_SPLUS_SPC: c_ulong = bindgen::XN_FLAG_SEP_SPLUS_SPC as c_ulong;
+pub const XN_FLAG_SEP_MULTILINE: c_ulong = bindgen::XN_FLAG_SEP_MULTILINE as c_ulong;
+pub const XN_FLAG_DN_REV: c_ulong = bindgen::XN_FLAG_DN_REV as c_ulong;
+pub const XN_FLAG_FN_MASK: c_ulong = bindgen::XN_FLAG_FN_MASK as c_ulong;
+pub const XN_FLAG_FN_SN: c_ulong = bindgen::XN_FLAG_FN_SN as c_ulong;
+pub const XN_FLAG_SPC_EQ: c_ulong = bindgen::XN_FLAG_SPC_EQ as c_ulong;
+pub const XN_FLAG_DUMP_UNKNOWN_FIELDS: c_ulong = bindgen::XN_FLAG_DUMP_UNKNOWN_FIELDS as c_ulong;
+pub const XN_FLAG_RFC2253: c_ulong = bindgen::XN_FLAG_RFC2253 as c_ulong;
+pub const XN_FLAG_ONELINE: c_ulong = bindgen::XN_FLAG_ONELINE as c_ulong;
// TODO(crbug.com/boringssl/596): Remove these wrappers.
#[cfg(unsupported_inline_wrappers)]