@@ -5,7 +5,7 @@ use super::{Awk, csv_split_fields};
55use crate :: builtins:: limits:: {
66 AWK_MAX_GETLINE_CACHE_BYTES as MAX_GETLINE_CACHE_BYTES ,
77 AWK_MAX_GETLINE_CACHED_FILES as MAX_GETLINE_CACHED_FILES ,
8- AWK_MAX_GETLINE_FILE_BYTES as MAX_GETLINE_FILE_BYTES ,
8+ AWK_MAX_GETLINE_FILE_BYTES as MAX_GETLINE_FILE_BYTES , AWK_MAX_OUTPUT_BYTES as MAX_OUTPUT_BYTES ,
99 AWK_MAX_OUTPUT_TARGETS as MAX_OUTPUT_TARGETS ,
1010} ;
1111use crate :: builtins:: { Builtin , Context } ;
@@ -947,6 +947,20 @@ async fn test_awk_output_limit_exceeded() {
947947 ) ;
948948}
949949
950+ #[ tokio:: test]
951+ async fn test_awk_single_write_over_limit_rejected ( ) {
952+ // One oversized record must be rejected before buffering stdout.
953+ let input = "x" . repeat ( MAX_OUTPUT_BYTES ) ;
954+ let result = run_awk ( & [ "{ print }" ] , Some ( & input) ) . await . unwrap ( ) ;
955+ assert_eq ! ( result. exit_code, 2 ) ;
956+ assert ! (
957+ result. stderr. contains( "output limit exceeded" ) ,
958+ "stderr should mention output limit: {}" ,
959+ result. stderr
960+ ) ;
961+ assert_eq ! ( result. stdout. len( ) , 0 ) ;
962+ }
963+
950964#[ tokio:: test]
951965async fn test_awk_output_under_limit_ok ( ) {
952966 // Small output well under 10MB should succeed normally
0 commit comments