difftreelog
fix logs may contain non-utf8 lines, use lossy conversion
in: trunk
2 files changed
crates/nix-eval/src/logging.ccdiffbeforeafterboth--- a/crates/nix-eval/src/logging.cc
+++ b/crates/nix-eval/src/logging.cc
@@ -9,10 +9,14 @@
bool isVerbose() override { return true; }
void log(Verbosity lvl, std::string_view s) override {
- rust::Str str(s.data(), s.size());
+ rust::Slice<const unsigned char> str(reinterpret_cast<const unsigned char*>(s.data()), s.size());
emit_log(lvl, str);
}
- void logEI(const ErrorInfo &ei) override { emit_log(ei.level, ei.msg.str()); }
+ void logEI(const ErrorInfo &ei) override {
+ auto s = ei.msg.str();
+ rust::Slice<const unsigned char> str(reinterpret_cast<const unsigned char*>(s.data()), s.size());
+ emit_log(ei.level, str);
+ }
void startActivity(ActivityId act, Verbosity lvl, ActivityType type,
const std::string &s, const Fields &fields,
@@ -22,7 +26,9 @@
if (f.type == Logger::Field::tInt) {
b->add_int_field(f.i);
} else if (f.type == Logger::Field::tString) {
- b->add_string_field(f.s);
+ auto s = &f.s;
+ rust::Slice<const unsigned char> str(reinterpret_cast<const unsigned char*>(s->data()), s->size());
+ b->add_string_field(str);
} else {
unreachable();
}
@@ -38,7 +44,9 @@
if (f.type == Logger::Field::tInt) {
b->add_int_field(f.i);
} else if (f.type == Logger::Field::tString) {
- b->add_string_field(f.s);
+ auto s = &f.s;
+ rust::Slice<const unsigned char> str(reinterpret_cast<const unsigned char*>(s->data()), s->size());
+ b->add_string_field(str);
} else {
unreachable();
}
crates/nix-eval/src/logging.rsdiffbeforeafterboth300 fn add_int_field(&mut self, i: i32) {300 fn add_int_field(&mut self, i: i32) {301 self.fields.push(FieldValue::Int(i));301 self.fields.push(FieldValue::Int(i));302 }302 }303 fn add_string_field(&mut self, v: &str) {303 fn add_string_field(&mut self, v: &[u8]) {304 let v = String::from_utf8_lossy(v);304 self.fields.push(FieldValue::Str(v.to_owned()));305 self.fields.push(FieldValue::Str(v.to_string()));305 }306 }306 fn emit(&mut self, parent: u64, s: &str) {307 fn emit(&mut self, parent: u64, s: &str) {307 let mut mapping = NIX_SPAN_MAPPING.lock().expect("not poisoned");308 let mut mapping = NIX_SPAN_MAPPING.lock().expect("not poisoned");455 let mut mapping = NIX_SPAN_MAPPING.lock().expect("not poisoned");456 let mut mapping = NIX_SPAN_MAPPING.lock().expect("not poisoned");456 mapping.remove(&v);457 mapping.remove(&v);457}458}458fn emit_log(lvl: u32, v: &str) {459fn emit_log(lvl: u32, v: &[u8]) {459 let verbosity = Verbosity::from_int(lvl);460 let verbosity = Verbosity::from_int(lvl);460 let level: Level = verbosity.into();461 let level: Level = verbosity.into();462 let v = String::from_utf8_lossy(v);461 if level == Level::ERROR {463 if level == Level::ERROR {462 error!(target: "nix", "{v}")464 error!(target: "nix", "{v}")463 } else if level == Level::WARN {465 } else if level == Level::WARN {539 type StartActivityBuilder;541 type StartActivityBuilder;540 fn new_start_activity(activity_id: u64, lvl: u32, typ: u32) -> Box<StartActivityBuilder>;542 fn new_start_activity(activity_id: u64, lvl: u32, typ: u32) -> Box<StartActivityBuilder>;541 fn add_int_field(&mut self, i: i32);543 fn add_int_field(&mut self, i: i32);542 fn add_string_field(&mut self, v: &str);544 fn add_string_field(&mut self, v: &[u8]);543 fn emit(&mut self, parent: u64, s: &str);545 fn emit(&mut self, parent: u64, s: &str);544 fn emit_result(&mut self, ty: u32);546 fn emit_result(&mut self, ty: u32);545547546 fn emit_warn(v: &str);548 fn emit_warn(v: &str);547 fn emit_stop(id: u64);549 fn emit_stop(id: u64);548 fn emit_log(lvl: u32, v: &str);550 fn emit_log(lvl: u32, v: &[u8]);549 }551 }550 unsafe extern "C++" {552 unsafe extern "C++" {551 include!("nix-eval/src/logging.hh");553 include!("nix-eval/src/logging.hh");