@@ -1843,6 +1843,7 @@ static Eterm do_split_global_result(Process *p, Eterm subject, BinaryFindContext
18431843 Uint extracted_offset ;
18441844 Uint extracted_size ;
18451845 Eterm extracted ;
1846+ Eterm empty_extracted = THE_NON_VALUE ;
18461847 Uint do_trim ;
18471848 Sint i ;
18481849 Uint offset , size ;
@@ -1895,12 +1896,20 @@ static Eterm do_split_global_result(Process *p, Eterm subject, BinaryFindContext
18951896 extracted_size = NBITS (fa -> end_pos - (fad [i ].pos + fad [i ].len ));
18961897
18971898 if (!(extracted_size == 0 && do_trim )) {
1898- extracted = erts_build_sub_bitstring (& fa -> factory .hp ,
1899- br_flags ,
1900- br ,
1901- base ,
1902- extracted_offset ,
1903- extracted_size );
1899+ if (extracted_size == 0 ) {
1900+ if (empty_extracted == THE_NON_VALUE ) {
1901+ empty_extracted = HEAP_BITSTRING (fa -> factory .hp , base , 0 , 0 );
1902+ fa -> factory .hp += heap_bits_size (0 );
1903+ }
1904+ extracted = empty_extracted ;
1905+ } else {
1906+ extracted = erts_build_sub_bitstring (& fa -> factory .hp ,
1907+ br_flags ,
1908+ br ,
1909+ base ,
1910+ extracted_offset ,
1911+ extracted_size );
1912+ }
19041913 fa -> term = CONS (fa -> factory .hp , extracted , fa -> term );
19051914 fa -> factory .hp += 2 ;
19061915
@@ -1917,12 +1926,20 @@ static Eterm do_split_global_result(Process *p, Eterm subject, BinaryFindContext
19171926 extracted_size = NBITS (fad [0 ].pos );
19181927
19191928 if (!(extracted_size == 0 && do_trim )) {
1920- extracted = erts_build_sub_bitstring (& fa -> factory .hp ,
1921- br_flags ,
1922- br ,
1923- base ,
1924- extracted_offset ,
1925- extracted_size );
1929+ if (extracted_size == 0 ) {
1930+ if (empty_extracted == THE_NON_VALUE ) {
1931+ empty_extracted = HEAP_BITSTRING (fa -> factory .hp , base , 0 , 0 );
1932+ fa -> factory .hp += heap_bits_size (0 );
1933+ }
1934+ extracted = empty_extracted ;
1935+ } else {
1936+ extracted = erts_build_sub_bitstring (& fa -> factory .hp ,
1937+ br_flags ,
1938+ br ,
1939+ base ,
1940+ extracted_offset ,
1941+ extracted_size );
1942+ }
19261943 fa -> term = CONS (fa -> factory .hp , extracted , fa -> term );
19271944 fa -> factory .hp += 2 ;
19281945 }
0 commit comments