Pārlūkot izejas kodu

fix(cli): Fixes errors on command output, closes #8110 (#8162)

Fixes #8110
Olivier Lemasle 1 gadu atpakaļ
vecāks
revīzija
1d5aa38ae4

+ 7 - 0
.changes/fix-cmd-output-error.md

@@ -0,0 +1,7 @@
+---
+"@tauri-apps/cli": patch:bug
+"tauri-cli": patch:bug
+"tauri-bundler": patch:bug
+---
+
+Fixes errors on command output, occuring when the output stream contains an invalid UTF-8 character, or ends with a multi-bytes UTF-8 character.

+ 14 - 8
tooling/bundler/src/bundle/common.rs

@@ -169,11 +169,14 @@ impl CommandExt for Command {
       let mut lines = stdout_lines_.lock().unwrap();
       loop {
         line.clear();
-        if let Ok(0) = stdout.read_line(&mut line) {
-          break;
+        match stdout.read_line(&mut line) {
+          Ok(0) => break,
+          Ok(_) => {
+            debug!(action = "stdout"; "{}", line.trim_end());
+            lines.extend(line.as_bytes().to_vec());
+          }
+          Err(_) => (),
         }
-        debug!(action = "stdout"; "{}", &line[0..line.len() - 1]);
-        lines.extend(line.as_bytes().to_vec());
       }
     });
 
@@ -185,11 +188,14 @@ impl CommandExt for Command {
       let mut lines = stderr_lines_.lock().unwrap();
       loop {
         line.clear();
-        if let Ok(0) = stderr.read_line(&mut line) {
-          break;
+        match stderr.read_line(&mut line) {
+          Ok(0) => break,
+          Ok(_) => {
+            debug!(action = "stderr"; "{}", line.trim_end());
+            lines.extend(line.as_bytes().to_vec());
+          }
+          Err(_) => (),
         }
-        debug!(action = "stderr"; "{}", &line[0..line.len() - 1]);
-        lines.extend(line.as_bytes().to_vec());
       }
     });
 

+ 14 - 8
tooling/cli/src/lib.rs

@@ -231,11 +231,14 @@ impl CommandExt for Command {
       let mut lines = stdout_lines_.lock().unwrap();
       loop {
         line.clear();
-        if let Ok(0) = stdout.read_line(&mut line) {
-          break;
+        match stdout.read_line(&mut line) {
+          Ok(0) => break,
+          Ok(_) => {
+            debug!(action = "stdout"; "{}", line.trim_end());
+            lines.extend(line.as_bytes().to_vec());
+          }
+          Err(_) => (),
         }
-        debug!(action = "stdout"; "{}", &line[0..line.len() - 1]);
-        lines.extend(line.as_bytes().to_vec());
       }
     });
 
@@ -247,11 +250,14 @@ impl CommandExt for Command {
       let mut lines = stderr_lines_.lock().unwrap();
       loop {
         line.clear();
-        if let Ok(0) = stderr.read_line(&mut line) {
-          break;
+        match stderr.read_line(&mut line) {
+          Ok(0) => break,
+          Ok(_) => {
+            debug!(action = "stderr"; "{}", line.trim_end());
+            lines.extend(line.as_bytes().to_vec());
+          }
+          Err(_) => (),
         }
-        debug!(action = "stderr"; "{}", &line[0..line.len() - 1]);
-        lines.extend(line.as_bytes().to_vec());
       }
     });