@@ -572,32 +572,48 @@ void logv(struct logger *log, enum log_level level,
572
572
if (vasprintf (& log_msg , fmt , ap ) == -1 )
573
573
abort ();
574
574
575
- char * * lines = tal_strsplit (
576
- log , json_escape_unescape (log , (struct json_escape * )log_msg ), "\n" ,
577
- STR_NO_EMPTY );
578
-
579
- /* Split to lines and log them separately. */
580
- for (size_t j = 0 ; lines [j ]; j ++ ) {
581
- l -> log = tal_strdup (log , lines [j ]);
575
+ const char * unescaped_log =
576
+ json_escape_unescape (log , (struct json_escape * )log_msg );
577
+ if (!strchr (log_msg , '\\' ) || !unescaped_log ) {
578
+ l -> log = log_msg ;
579
+ size_t log_len = strlen (l -> log );
582
580
583
581
/* Sanitize any non-printable characters, and replace with '?'
584
582
*/
585
- size_t line_len = strlen (l -> log );
586
- for (size_t i = 0 ; i < line_len ; i ++ )
583
+ for (size_t i = 0 ; i < log_len ; i ++ )
587
584
if (l -> log [i ] < ' ' || l -> log [i ] >= 0x7f )
588
585
l -> log [i ] = '?' ;
589
586
590
587
maybe_print (log , l );
591
588
maybe_notify_log (log , l );
592
589
593
590
add_entry (log , & l );
591
+ } else {
592
+ char * * lines =
593
+ tal_strsplit (log , take (unescaped_log ), "\n" , STR_NO_EMPTY );
594
+
595
+ /* Split to lines and log them separately. */
596
+ for (size_t j = 0 ; lines [j ]; j ++ ) {
597
+ l -> log = strdup (lines [j ]);
598
+
599
+ /* Sanitize any non-printable characters, and replace
600
+ * with '?'
601
+ */
602
+ size_t line_len = strlen (l -> log );
603
+ for (size_t i = 0 ; i < line_len ; i ++ )
604
+ if (l -> log [i ] < ' ' || l -> log [i ] >= 0x7f )
605
+ l -> log [i ] = '?' ;
606
+
607
+ maybe_print (log , l );
608
+ maybe_notify_log (log , l );
609
+
610
+ add_entry (log , & l );
611
+ }
594
612
}
595
613
596
614
if (call_notifier )
597
615
notify_warning (log -> log_book -> ld , l );
598
616
599
- tal_free (lines );
600
- free (log_msg );
601
617
errno = save_errno ;
602
618
}
603
619
0 commit comments